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()方法