StringBuffer类
字符串缓冲区支持可变的字符串
StringBuffer又称为可变字符序列,它是一个类似于 String 的字符串缓冲区,通过某些方法调用可以改变该序列的长度和内容。
StringBuffer:字符串的缓冲区对象,提高字符串的操作效率,内部采用了可变数组方式实现,类的内部定义了数组,这个数组没有final,char数组默认容量16个字符
StringBuffer的方法使用(很重要)
1、StringBuffer append,将任意类型的数据添加缓冲区,append 返回值写return this,调用者是谁,返回值就是谁
下面代码输出结果为:6
public static void function(){
StringBuffer buffer=new StringBuffer();
//调用StringBuffer方法append向缓冲区追加内容
buffer.append(6).append(false);//方法调用链
System.out.println(buffer);
}
2、delete(int start,int end)删除缓冲区中字符, 开始索引包含,结尾索引不包含
下面代码的输出结果为:af(1,5)
public static void function1(){
StringBuffer buffer=new StringBuffer();
buffer.append("abcdef");
buffer.delete(1, 5);
buffer.delete(0,buffer.length());//想要全删除
System.out.println(buffer);
}
3、insert(int index,任意类型),将任意类型数据插入到缓冲区的指定索引上
下面代码的输出结果为:abc9.5def
public static void function2(){
StringBuffer buffer=new StringBuffer();
buffer.append("abcdef");
buffer.insert(3, 9.5);//如果是6索引会在"abcdef"的最后,如果是7索引会报越界异常
System.out.println(buffer);
}
4、replace(int start,int end,String str),将指定范围内的所有字符,替换成新的字符串
下面代码的输出结果为:aQef
public static void function3(){
StringBuffer buffer=new StringBuffer();
buffer.append("abcdef");
buffer.replace(1,4,"Q");
System.out.println(buffer);
}
5、reverse()将缓冲区的字符反转
下面代码的输出结果为:fedcba
public static void function4(){
StringBuffer buffer=new StringBuffer();
buffer.append("abcdef");
buffer.reverse();
System.out.println(buffer);
}
6、String toString()继承Object,重写 toString(),将缓冲区的所有字符,变成字符串
注意用String类型接受,下面代码的输出结果为:abcdef12345
public static void function5(){
StringBuffer buffer=new StringBuffer();
buffer.append("abcdef");
buffer.append(12345);
//将可变的缓冲区对象,变成了不可变的String类型的对象
String s=buffer.toString();
System.out.println(s);
}
两个类的方法都是相同的,StringBuilder线程不安全,运行速度快,StringBuffer线程安全,运行速度慢,用StringBuilder
StringBuffer的小练习
练习:int[] arr = {34,12,89,68};将一个int[]中元素转成字符串 格式 [34,12,89,68]
下面代码输出结果为:[34,12,89,68]
package day15;
public class StringBufferTest {
public static void main(String[] args) {
int[] arr = {34,12,89,68};
toString(arr);
// System.out.println(toString(arr));
}
/*
* int[] arr = {34,12,89,68};将一个int[]中元素转成字符串
* 格式 [34,12,89,68]
* String s="["//用这种方法会浪费资源
* 数组遍历
* s+=arr[i];
* s+"]"
* StringBuffer实现,节约内存空间, String+在缓冲区中,append方法追加
*/
public static void toString(int[]arr){//想要变成字符串就把void换成String
//创建字符串缓冲区
StringBuffer buffer=new StringBuffer();
buffer.append("[");
//遍历数组
for(int i=0;i<arr.length;i++){
//判断是不是数组的最后一个元素
if(i==arr.length-1){
buffer.append(arr[i]).append("]");;
}else{
buffer.append(arr[i]).append(",");;
}
}
System.out.println(buffer);//这边用return toString()进行返回,调用方法加输出语句
}
}
总结:
String: 字符串类,字符串是常量;它们的值在创建之后不能更改
方法:
boolean equals(Object obj) 判断两个字符串中的内容是否相同
boolean equalsIgnoreCase(String str) 判断两个字符串中的内容是否相同, 忽略大小写
boolean contains(String str) 判断该字符串中 是否包含给定的字符串
boolean startsWith(String str) 判断该字符串 是否以给定的字符串开头
boolean endsWith(String str) 判断该字符串 是否以给定的字符串结尾
boolean isEmpty() 判断该字符串的内容是否为空的字符串 ""
int length() 获取该字符串的长度
char charAt(int index) 获取该字符串中指定位置上的字符
String substring(int start) 从指定位置开始,到末尾结束,截取该字符串,返回新字符串
String substring(int start,int end) 从指定位置开始,到指定位置结束,截取该字符串,返回新字符串
int indexOf(int ch ) 获取给定的字符,在该字符串中第一次出现的位置
int indexOf(String str) 获取给定的字符串,在该字符串中第一次出现的位置
int indexOf(int ch,int fromIndex) 从指定位置开始,获取给定的字符,在该字符
byte[] getBytes() 把该字符串 转换成 字节数组
char[] toCharArray() 把该字符串 转换成 字符数组
String replace(char old,char new) 在该字符串中,将给定的旧字符,用新字符替换
String replace(String old,String new) 在该字符串中, 将给定的旧字符串,用新字符串替换
String trim() 去除字符串两端空格,中间的不会去除,返回一个新字符串
String toLowerCase() 把该字符串转换成 小写字符串
String toUpperCase() 把该字符串转换成 大写字符串
int indexOf(String str,int fromIndex) 从指定位置开始,获取给定的字符串,在该字符串中第一次出现的位置
StringBuffer/StringBuilder方法
public StringBuffer append(String str) 在原有字符串缓冲区内容基础上,在末尾追加新数据
public StringBuffer insert(int offset,String str) 在原有字符串缓冲区内容基础上,在指定位置插入新数据
public StringBuffer deleteCharAt(int index) 在原有字符串缓冲区内容基础上,删除指定位置上的字符
public StringBuffer delete(int start,int end) 在原有字符串缓冲区内容基础上,删除指定范围内的多个字符
public StringBuffer replace(int start,int end,String str)在原有字符串缓冲区内容基础上,将指定范围内的多个字符 用给定的字符串替换
public StringBuffer reverse() 将字符串缓冲区的内容 反转 "abc"----"cba"
public String substring(int start) 从指定位置开始,到末尾结束,截取该字符串缓冲区,返回新字符串
public String substring(int start,int end) 从指定位置开始,到指定位置结束,截取该字符串缓冲区,返回新字符串