StringBuffer类中常见的方法如下:总结有如下操作(增,删,查,改,翻转,字串)
方法 | 说明 |
StringBuffer insert(String s) | 在指定位置插入字符串 |
int length() | 确定StringBuffer对象的长度 |
void setCharAt(int pos,char ch) | 使用ch指定的新值设置pos指定位置上的字符 |
String toString() | 转换为字符串形式 |
StringBuffer reverse() | 将字符串反转也就是倒叙 |
StringBuffer delete(int start,int end) | 删除start到end-1位置的字符串 |
StringBuffer deleteCharAt(int pos) | 删除pos索引指定处字符 |
StringBuffer replace(int start,int end,String s) | 使用s替换指定位置上的字符串,从start开始到end结束 |
接下来我们举例这些方法的作用,其中有一些特别注意的地方
String s1="abczdefgcc";//定义一个字符串s1
System.out.println(s1.toUpperCase());//将字符串全部转换为大写
System.out.println(s1.startsWith("abcs"));//判断是不是以"abcs"开始,结果返回Boolean值
System.out.println(s1.endsWith("defgcc"));//判断是不是以"abcs"结束,结果返回Boolean值
/*s1.replace("c", "z");特别注意这里,这里的replace只是临时的改变了String的值,并没有实际
改变s1的值,只要记住String几乎不可变就可以*/
System.out.println(s1.replace("c", "z"));//这里输出的是abzzdefgzz
//这里输出的结果依然是"abczdefgcc"而对于StringBuffer则会有不一样的结果
s1.replace("z", "c");
System.out.println(s1);
//定义一个StringBuffer对象s3
StringBuffer s3 = new StringBuffer("中国");//初始化s3为"中国"
s3.append("美");// 则s3为"中国美"。实际上s3的值已经改变
// 转换为不变字符串:toString()。
System.out.println(s3.toString());//输出的结果是"中国美"
//构造一个s4对象为StringBuffer类并且初始化值为"abcdefgh"
StringBuffer s4 = new StringBuffer("abcdefgh");
System.out.println(s4.length()); //s4的长度为8
System.out.println(s4.capacity());//8+16 因为StringBuffer后面预留了16个字节的容量
// 字符串反转
s4.reverse();
System.out.println(s4.toString());//输出的结果是"hgfedcba"
// 删除指定字符串着中的字符
// delete(int start,int end)
StringBuffer s5 = new StringBuffer("Hello");
s5.delete(0, s5.length()); // 删除字符串s的全部字符
System.out.println(s5.toString());//输出为空
// deleteCharAt(int index)
StringBuffer s6 = new StringBuffer("Hello");
s6.deleteCharAt(4); // 删除字符串s索引为4的字符由于是从0开始计算,所以第4个字符是'o'
System.out.println(s6.toString());//输出为"Hell"
System.out.println(s6);//输出为"Hell"
s6.toString();
// 替换字符串
// replace(int start,int end,String str)
StringBuffer s7 = new StringBuffer("Hello");
s7.replace(0, 3, "qqq");//意思是从0号开始,替换3个字符所以"Hel"被替换
System.out.println(s7.toString());//输出结果是qqqlo
// substring(int start) //返回从start下标开始以后的字符串
StringBuffer s8 = new StringBuffer("Hello");
s8.substring(2);//这里的语句执行之后并没有改变s8的值下面是输出结果
System.out.println(s8.toString());//输出结果是"Hello"
System.out.println(s8.substring(1));//输出结果是"ello",从这里可以看出数字1是截取前1个字符
System.out.println(s8.substring(2));//输出结果是"llo",从这里可以看出数字2是截取前2个字符
// substring(int start,int end) //返回从start到 end-1字符串
StringBuffer s9 = new StringBuffer("Hello");
s9.substring(2,3);
System.out.println(s9.toString());//输出结果是Hello
System.out.println(s9.substring(2,4));//输出结果是ll
String和StringBuffer的几点区别
1.String一般来说对象的值是固定不变的对于一些操作方法也只是临时的改变了并没有实质性改变
StringBuffer几乎所有的操作都是对对象的值进行修改所以StringBuffer 用于表示可以修改的字符串
2.对于Stringbuffer中subString来说这个方法并没有实质性的改构造对象的值与String类似
String的不变性
当字符串string在内存中创建后,就不会再改变,所以对该字符串进行的所有改变操作,实际上都没有改变原来的字符串,你可以参考一下我们第一节,不过我们调用了原始的String的多少个方法,其实对原来的字符都不会有任何改变,都是重新生成一个新的字符串作为返回值,这就是所谓的Java String的不变性。
每一次的修改操作都会生成一个新的字符串,有一个不好的点——慢慢地消耗了内存,对GC来说也是非常费时的一件事,效率非常低,所以如果我们需要多次改变创建的字符串的话,那么使用String将会是个很不好的选择。
String与StringBuffer的区别
真是因为String是的不变性,StringBuffer或者StringBuilder就有他们的用武之地了,当然String有它的优点,就是使用方便,我们如何做出选择呢?一般如果字符串经常要做出修改,比如经常要拼接,删除等等,那么使用StringBuffer或者StringBuilder比较好,你可以在完成操作后使用toString方法转换为String类。