StringBuffer
定义:线程安全的可变序列
方法:
- 构造方法
- public StringBuffer():构造一个不带字符串的缓冲区,其初始容量为16个字符;
- public StringBuffer(int capacity):构造一个不带字符串但具有初始容量的缓冲区;
- public StringBuffer(String str):构造一个字符串并将初始内容初始化为指定的字符串,该字符串的长度为16加上字符串参数的长度
- 基本功能
- 获取功能
- public int capacity():返回当前容量,容量指可用于最新插入的字符的存储量,超过这一容量就需要重新分配;
- public int length():返回长度(及返回字符数);
- 添加功能
- public StringBuffer append(XXX 变量名):
- 获取功能
将指定的内容追加到序列末尾,返回一个StringBuffer本身;
(XXX可以是boolean类型 ,char类型,char[]类型,CharSequence类型,double类型,float类型,int类型,long类型,Object类型,String类型,StringBuffer类型,返回值都是StringBuffer)
-
-
- public StringBuffer insert(int index,XXX 变量名):
-
在指定位置插入一个指定内容,返回字符串缓冲区本身
(XXX可以是boolean类型,char类型,char[]类型,CharSequence类型,double类型,float类型,int类型,long类型,Object类型,String类型,StringBuffer类型,返回值都是StringBuffer)
-
- 删除功能
- public StringBuffer delete(int start,in end):
- 删除功能
从字符串中移除从索引start到end对应的值(左包右不包);
-
-
- public StringBuffer deleteCharAt(int index):
-
移除指定位置处的字符
-
- 替换功能
- public StringBuffer replace(int start,int end,String str):
- 替换功能
从指定位置开始到指定位置结束,用给定的字符串替换字符内容(包左不包右)
-
- 反转功能:
- public StringBuffer reverse():
- 反转功能:
将此字符序列用其反转形式取代,返回该StringBuffer
-
- 截取功能:
- public String substring(int index):
- 截取功能:
从参数索引处开始截取一直到末尾结束,返回一个String类型的字符串;
-
-
- public String substring(int index,int end):
-
从index处开始截取一直到end处结束,返回一个String类型的字符串(包左不包右)
补充
1.什么是线程安全什么是线程不安全?
线程安全--->同步--->执行效率低
举例:银行的网站
线程不安全--->不同步---执行效率高(单线程中使用StringBulider代替stringBuffer)
举例:论坛网站
线程安全和执行效率在多线程考虑
2.StringBuffer(容器)和String的区别?
前者是线程安全的类,可变的字符序列,内存中提供字符串缓冲区;后者是不可变的字符序列
从内存角度考虑:前者优于后者,因为String类会在方法区中开辟空间--->占内存;而StringBuffer里面存在初始容量,在里面不断追加字符串即可(方法为append)
3.String与StringBuffer之间的相互转化?
(1)为什么要学习类与类之间的转换?
举例:B类-->A类
有时候我们需要使用A类的一些功能
A类-->B类
有时候我们需要使用B类的一些功能
(2)String--->StringBuffer:
a.使用构造方法:
StringBuffer sb=new StringBuffer(String str)
b.使用无参构造+append方法:
StringBuffer sb=new StringBuffer()
sb.append(String str)
(3)StringBuffer--->String:
a.使用构造方法:
String str=new String(StringBuffer buffer)
b.StringBuffer中的toString方法:
public String toString()
返回此序列中字符串表现形式
练习
- 将数组拼接成一个字符串{11,22,33,44,55}===>[11,22,33,44,55]
public static StringBuffer method(int[] arr){
StringBuffer sb1=new StringBuffer();
sb1.append("[");
for (int i = 0; i < arr.length; i++) {
if (i==arr.length-1) {
sb1.append(arr[i]);
sb1.append("]");
}else {
sb1.append(arr[i]); sb1.append(",");
}
}
return sb1;
}
- 判断字符串是否是对称字符?
(aba 123321)
猜用假设法,假设这个字符是对称字符返回true
方法一:
public static boolean method1(String str){
boolean flag=true;
for (int i = 0; i < str.length()/2; i++) {
if (str.charAt(i)==str.charAt(str.length()-1-i)) {}
else {
System.out.println("这不是对称字符串");
}
}
return flag;}
方法二:
public static boolean method2(String str){
boolean flag=true;
for(int start=0,end=str.length()-1;start<=end;start++,end--){
if (str.charAt(start)==str.charAt(end)) { }
else {
return flag=false;
}
}
return true;
}