String

Java中的字符串值属于String类,虽然有其它方法表示字符串(如字符数组),但Java一般使用String类作为字符串的标准格式,Java编译器把字符串值作为String对象;

String对象一旦创建就不能改变。如果需要进行大量的字符串修改操作,应该使用StringBuilder/StringBuffer类或者字符串数组,最终结果可以被转换成String对象;

StringBuffer:线程安全的可变字符序列;

一个类似于String的字符串缓冲区,通过某些方法调用可以改变该序列的长度和内容;

每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组;

如果内存缓冲区溢出,则此容量自动增大;

StringBuilder:从JDK1.5开始,为StringBuffer类补充了一个单个线程使用的等价类,即StringBuffer;

与StringBuffer相比,通常应该优先使用StringBuilder类,因为它支持所有相同的操作,但由于它不执行同步,所有速度更快;

常用方法:

public int length()

public int capacity()

public StringBuffer append(String str)

public StringBuffer insert(int offset,String str)

public int indexOf(String str)

public int indexOf(String str,int fromIndex)

public int lastIndexOf(String str)

public StringBuffer reverse()

public String toString()

 public class StringBuilderDemo{
public static void main(String []args){
//StringBuilder sb="abc";//无此声明方式
//StringBuilder sb=new StringBuilder();//默认16个字符大小的容量
//StringBuilder sb=new StringBuilder(100);//初始化容量大小的动态字符串
//StringBuilder sb=new StringBuilder("abc"); StringBuilder sb=new StringBuilder();
sb.append("hello");
sb.append(1);
sb.append(1.5);
sb.append(true);
System.out.println(sb.length());
System.out.println(sb.capacity()); sb.insert(5,"world");
System.out.println(sb.toString());
sb.replace(5,7,"el");
System.out.println(sb.toString());
System.out.println(sb.indexOf("el"));
System.out.println(sb.reverse());
}
}

自定义一个自己的StringBuilder的类

案例介绍:自定义一个MyStringBuilder类来实现StringBuilder的功能;

案例设计:实现append方法追加字符串的功能;实现length方法统计字符的个数;实现capacity()方法获取容器大小;实现toString()方法,完成字符串的输出;

 import java.util.Arrays;
public class MyStringBuilderDemo{
public static void main(String []args){
MyStringBuilder msb=new MyStringBuilder();
msb.append("hello").append("java").append("12345678");
System.out.println("字符个数:"+msb.length());
System.out.println("总容量大小:"+msb.capacity());
System.out.println("输出字符串:"+msb.toString());
}
} class MyStringBuilder{
private char[] value;//字符数组
private int count=0;//字符数组中存放字符的个数
public MyStringBuilder(){
value=new char[16];
}
public MyStringBuilder(int capacity){
value=new char[capacity];
}
public MyStringBuilder(String str){
value=new char[str.length()+16];
}
//得到字符数组中存放的字符个数
public int length(){
return count;
}
//返回容器的容量大小
public int capacity(){
return value.length;
}
//实现字符串的添加(追加)
public MyStringBuilder append(String str){
int len=str.length();//获取要添加的字符串的长度
//确保字符数组能放进去所添加的字符串
ensureCapacity(count+len);
//把要添加的字符串追加到新的指定数组的指定位置后
str.getChars(0,len,value,count);
count+=len;//元素的个数增加了len
return this;
} private void ensureCapacity(int capacity){
//数据超出容量大小
if(capacity-value.length>0){
int newCapacity=value.length*2+2;//扩容后的新字符数组大小
value=Arrays.copyOf(value,newCapacity);
}
}
//把字符数组的字符转换成字符串格式
public String toString(){
return new String(value,0,count);
}
}

String、StringBuffer和StringBuilder,定义一个自己的StringBuilder的类的更多相关文章

  1. 定义一个复数(z=x+iy)类Complex,包含: 两个属性:实部x和虚部y 默认构造函数 Complex(),设置x=0,y=0 构造函数:Complex(int i,int j) 显示复数的方法:showComp()将其显示为如: 5+8i或5-8i 的形式。 求两个复数的和的方法:(参数是两个复数类对象,返回值是复数类对象)public Complex addComp(Compl

    因标题框有限,题目未显示完整,以下再放一份: 定义一个复数(z=x+iy)类Complex,包含: 两个属性:实部x和虚部y 默认构造函数 Complex(),设置x=0,y=0 构造函数:Compl ...

  2. 定义一个“点”(Point)类用来表示三维空间中的点(有三个坐标)。要求如下: (1)可以生成具有特定坐标的点对象。 (2)提供可以设置三个坐标的方法。 (3)提供可以计算该“点”距原点距离平方的方法。 (4)编写主类程序验证。

    package b; public interface ZuoBiao { double zuobiao(); } package b; public class Point implements Z ...

  3. 构建一个学生Student,根据类Student的定义,创建五个该类的对象,输出每个学生的信息,计算并输出这五个学生Java语言成绩的平均值,以及计算并输出他们Java语言成绩的最大值和最小值。

    定义一个表示学生信息的类Student,要求如下: (1)类Student的成员变量: sNO 表示学号: sName表示姓名: sSex表示性别: sAge表示年龄: sJava:表示Java课程成 ...

  4. final,finally,finalize有什么区别?String, StringBuffer, StringBuilder有什么区别?Exception和Error有什么区别?

    继上篇JVM学习之后,后面将分三期深入介绍剩余JAVA基础面试题,每期3题. 题目一.final,finally,finalize有什么区别? /*请尊重作者劳动成果,转载请标明原文链接:*/ /* ...

  5. 浅谈 Java 字符串(String, StringBuffer, StringBuilder)

    我们先要记住三者的特征: String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全) 一.定义 查看 API 会发现,String ...

  6. 5.String StringBuffer StringBuilder

    String,StringBuffer和StringBuilder三者的讲解 对于StringBuffer和StringBuilder是对Stirng的一个优化. 之前已经说过了,String对象一旦 ...

  7. String,StringBuffer和StringBuilder三者的讲解

     对于java的学习者而言,无论是初学者,还是java大师,String对于大家而言,也绝对不会陌生.下面本人就从 自己学习的角度大致分析一下String,StringBuffer和StringBui ...

  8. Android/Java 中的 String, StringBuffer, StringBuilder的区别和使用

    Android 中的 String, StringBuffer 和 StringBuilder 是移动手机开发中经常使用到的字符串类.做为基础知识是必须要理解的,这里做一些总结. A.区别 可以从以下 ...

  9. Object,String,StringBuffer,StringBuilder,System,Runtime,Date,Math介绍及用法(API)

    1       Object对象 面向对象的核心思想:“找合适的对象,做适合的事情”. 合适的对象: 自己描述类,自己创建对象. sun已经描述了好多常用的类,可以使用这些类创建对象. API(App ...

随机推荐

  1. Git命令图片版

  2. 在DataGridView控件中验证数据输入

    实现效果: 知识运用: DataGridView控件的公共事件CellValidating //将System.Windows.Forms.DataGridViewCellValidatingEven ...

  3. 2018.4.22 深入理解Java的接口和抽象类

    前言 对于面向对象编程来说,抽象是他的一大特征之一.在Java中,可以通过两种形式来体现oop 的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初雪的时候会以为他们可以随意互 ...

  4. eubacteria|endosymbiosis|基因转移

    5.11线粒体和叶绿体是通过内共生进化而来的 初始细胞俘获有功能的真细菌(eubacteria)进入细胞内,该细菌逐渐演化为细胞器,这种现象称为内共生(endosymbiosis),所以该细胞器携带细 ...

  5. VS Code:设置多行注释快捷键

    多行注释,也叫块注释. 如何查看,并修改VS Code中的多行注释快捷键呢? 1). 点击 首选项 - 键盘快捷方式 2). 在搜索框中输入 comment 3). 这个时候可以看到“切换块注释”的信 ...

  6. Maven:项目结构

    目录结构图: project        |- src            |- main   //工程源代码目录                |- java        //工程java源代 ...

  7. IDEA项目显示树形结构

  8. 20180904 定时器setTimeout和setInterval回调问题

    引用: setTimeout和setInterval两者的区别 setTimeout和setInterval的优缺点 setTimeout和setInterval详解 两者的作用都是在定时多少毫秒后回 ...

  9. 洛谷 P3328 【[SDOI2015]音质检测】

    这题我做的好麻烦啊... 一开始想分块来着,后来发现可以直接线段树 首先考虑一个性质,我们如果有数列的相邻两项f[i]和 f[i+1]那么用这两项向后推k项其线性表示系数一定(表示为f[i+k]=a∗ ...

  10. 【思维题】TCO14 Round 2C InverseRMQ

    全网好像就只有劼和manchery写了博客的样子……:正解可能是最大流?但是仔细特判也能过 题目描述 RMQ问题即区间最值问题是一个有趣的问题. 在这个问题中,对于一个长度为 n 的排列,query( ...