StringBuffer
在开始时,首先看看String和stringbuffer的区别?
String是一个不可变的字符序列,而stringbuffer是一个可变的字符序列。
内存方面:String是在常量区开辟空间,比较耗费内存,而stringbuffer是一个字符串缓冲区,当字符串的大小没有超过缓冲区的容量时,可以调用之前的字符串,不用开辟新的空间
Stringbuffer:提供的是字符串缓冲区,是属于java.lang包里的,被final修饰
Stringbuffer的构造方法:
StringBuffer():无参构造的格式,初始化容量为16
StringBuffer(int capacity):指定容量构造一个字符串缓冲区
StringBuffer(String str):构造一个字符串缓冲区,并将其内容初始化为指定的容量。
构造一个StringBuffer缓冲区的一般格式为:
StringBuffer sb=new StringBuffer();
例如:
package TextDome;
/*StringBuffer():无参构造的格式,初始化容量为16
StringBuffer(int capacity):指定容量构造一个字符串缓冲区
StringBuffer(String str):构造一个字符串缓冲区,并将其内容初始化为指定的容量。*/
public class StringBufferDome {
public static void main(String[] args) {
StringBuffer s=new StringBuffer();
System.out.println("s:"+s);
System.out.println("length():"+s.length());
System.out.println("capacity():"+s.capacity());
System.out.println("------------------");
StringBuffer s1=new StringBuffer(73);
System.out.println("length():"+s1.length());
System.out.println("capacity():"+s1.capacity());
System.out.println("-------------------");
StringBuffer s2=new StringBuffer("baby");
System.out.println("length():"+s2.length());
System.out.println("capacity():"+s2.capacity());//这里是缓冲区初始化容量16与字符串的长度之和
}
}
运行结果:
/**
* @param args
* s:
* length():0
* capacity():16
* -------------
* length():0
* capacity():73
* -------------
* length():4
* capacity():20
*/
StringBuffer的功能:
1)添加功能:
(它在实际开发中使用最多)Public StringBuffer append(任何数据类型...),在末尾添加,并且返回到字符串缓冲区本身
Public StringBuffer insert(int offset,String str):将str字符串添加到指定的位置,返回的也是字符串缓冲区本身
例如:
package TextDome;
public class StringBufferDome01 {
public static void main(String[] args) {
StringBuffer sb=new StringBuffer();
sb.append("hello");
sb.append('A');
sb.append(1996);
System.out.println("sb:"+sb);
System.out.println("---------------");
sb.insert(5, "迪丽热巴");
System.out.println("sb:"+sb);
}
}
运行结果:
/**
* @author 杰哥
*sb:helloA1996
*---------------
*sb:hello迪丽热巴A1996
*/
2)删除功能
public StringBuffer deleteCharAt(int index):移除指定位置处的字符..
public StringBuffer delete(int start,int end):移除从指定位置处到end-1处的子字符串...
例如:
package TextDome;
/**
* StringBuffer的删除功能:
*
* public StringBuffer deleteCharAt(int index):移除指定位置处的字符..
* public StringBuffer delete(int start,int end):移除从指定位置处到end-1处的子字符串...
*/
public class StringDomedelete {
public static void main(String[] args) {
StringBuffer s=new StringBuffer();
s.append("Iloveyou");
s.append("迪丽热巴");
s.deleteCharAt(8);
System.out.println("s:"+s);
System.out.println("------------");
s.delete(1, 5);
System.out.println("s:+"+s);
}
}
运行结果:
/**
* @author 杰哥
*s:Iloveyou丽热巴
*--------------
*s:+Iyou丽热巴
*/
3)反转功能
public StringBuffer reverse() :将缓冲区中的字符序列反转取代,返回它(字符串冲)本身
package TextDome;
//public StringBuffer reverse() :将缓冲区中的字符序列反转取代,返回它(字符串冲)本身
public class StringBufferReverse {
public static void main(String[] args) {
StringBuffer sb=new StringBuffer();
sb.append("abcdef");
System.out.println(sb.reverse());
}
}
运行结果:
fedcba
4)截取功能
public String substring(int start):从指定位置开始截取,默认截取到末尾,返回值不在是缓冲区本身,而是一个新的字符串
public String substring(int start,int end) :从指定位置开始到指定位置结束截取,包前不包后,返回值不在是缓冲区本身,而是一个新的字符串
例如:
package TextDome;
/*public String substring(int start):从指定位置开始截取,默认截取到末尾,返回值不在是缓冲区本身,而是一个新的字符串
public String substring(int start,int end) :从指定位置开始到指定位置结束截取,包前不包后,返回值不在是缓冲区本身,而是一个新的字符串*/
public class StringBufferSubstring {
public static void main(String[] args) {
StringBuffer ss=new StringBuffer();
ss.append("迪丽热巴最美");
String str=ss.substring(2);
System.out.println("str:"+str);
String str1=ss.substring(0, 2);
System.out.println("str1:"+str1);
}
}
运行结果:
/**
* @author 杰哥
*str:热巴最美
*str1:迪丽
*/
5)替换功能
public StringBuffer replace(int start,int end,String str)
从指定位置到指定位置结束,用新的str字符串去替换,返回值是字符串缓冲区本身
例如:
package TextDome;
public class StringBufferReplace {
public static void main(String[] args) {
StringBuffer s1=new StringBuffer();
s1.append("baby最美");
s1.replace(0, 4, "迪丽热巴");
System.out.println("s1:"+s1);
}
}
运行结果:s1:迪丽热巴最美
StringBuffer与String之间的相互转化:
package TextDome;
public class StringBufferChange {
public static void main(String[] args) {
//String转换成StringBuffe
String s="reverse";
//方式1:通过带参方法
StringBuffer sb=new StringBuffer(s);
System.out.println("sb:"+sb);
//方式2:通过无参方法给进行赋值
StringBuffer sb2=new StringBuffer();
sb2.append(s);
System.out.println("sb2:"+sb2);
System.out.println("--------------");
//StringBuffer转换成String
StringBuffer sb3=new StringBuffer("subString");
//方式1
String str=new String(sb3);
System.out.println("str:"+str);
//方式2
String str2=sb3.toString();//这是StringBuffer的特有功能
System.out.println("str2:"+str2);
}
}
运行结果:
/**
* @author 杰哥
*sb:reverse
*sb2:reverse
*-------------
*str:subString
*str2:subString
*/
StringBuffer、String和StringBuilder的区别?
StringBuffer和StringBuilder都是一个可变的字符序列,提供了一个缓冲区(两者都可以看做容器)
StringBuffer:线程是安全的,同步的,执行效率低
StringBuilder:线程不安全的,不同步的,执行效率高,并且在单线程中优先采取StringBuilder
StringBuffer执行效率虽然低,但是在内存角度优于String类型,并且他还是一个可变的字符序列,
StringBuffer与数组的区别?
数组:他可以存储多个数据的容器,并且多个数据的类型必须一致
数组长度功能:length属性
StringBuffer:它是一个容器,它在缓冲区始终存储的只能是字符串类型的数据
获取缓冲区的长度:length()方法