StringBuffer类
概述:线程安全的可变字符序列
StringBuffer和String的区别
String是一个不可变的字符序列
StringBuffer是一个可变的字符序列
StringBuffer构造方法
public class demo1_String { /* StringBuffer的构造方法 * public StringBuffer():无参构造方法 * public StringBuffer(int capacity):指定容量的字符串缓冲区对象 * public StriingBuffer(String str):指定字符串内容的字符串缓冲区对象 * * StringBuffer的方法: * public int capacity():返回值当前容量。理论值(不掌握) * public int length():返回长度(字符数).实际值 * */ public static void main(String[] args) { StringBuffer sb =new StringBuffer(); System.out.println(sb.length()); //容器中的字符个数,实际值 System.out.println(sb.capacity()); //容器的初始容量,理论值 StringBuffer sb2= new StringBuffer(10); System.out.println(sb2.length()); System.out.println(sb2.capacity()); StringBuffer sb3= new StringBuffer("heima"); System.out.println(sb3.length()); System.out.println(sb3.capacity()); } }
StringBuffer添加功能
package tan.jung.string; import javax.swing.plaf.synth.SynthProgressBarUI; public class demo2_StringBuffer { /* public StringBuffer append(String str): * 可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身 * public StringBuffer insert(int offset,String str): * 在制定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身 * * StringBuffer是字符串缓冲区,当new的时候是在堆内存创建了一个对象, * 底层是一个长度16的字符数组,当调用添加的方法时,不会再重新创建对象, * 再不断向原缓冲区添加字符 * */ public static void main(String[] args) { //demo1(); StringBuffer sb1 =new StringBuffer("12345"); sb1.insert(3,"heima"); System.out.println(sb1); } private static void demo1() { StringBuffer sb1 =new StringBuffer(); StringBuffer sb2 =sb1.append(true); StringBuffer sb3 =sb1.append("heima"); StringBuffer sb4 = sb1.append(100); System.out.println(sb1.toString());//重写了 System.out.println(sb2.toString()); System.out.println(sb3.toString()); System.out.println(sb4.toString()); } }
StringBuffer的删除功能
package tan.jung.string; public class demo3_StringBuffer { /* public StringBuffer deleteCharAt(int index): * 删除指定位置的字符,并返回本身 * public StringBuffer delete(int start,int end): * 删除从指定位置开始指定位置结束的内容,并返回本身 * */ public static void main(String[] args) { StringBuffer sb1=new StringBuffer(); //sb1.deleteCharAt(4);//当缓冲区中这个索引上没有原始就会报错 sb1.append("woaixuexi"); //sb1.deleteCharAt(2); //System.out.println(sb1); //sb1.delete(1, 2); //包含头,不包含尾 //System.out.println(sb1); sb1.delete(0, sb1.length()); //情况缓冲区 System.out.println(sb1); } }
StringBuffer替换和反转功能
public class demo4_StringBuffer { /* StringBuffer的替换功能 * public StringBuffer replace(int start,int end,String str): * 从start开始到end用str替换 * * StringBuffer的反转功能 * public StringBuffer reverse(): * 字符串反转 * * */ public static void main(String[] args) { StringBuffer sb1 = new StringBuffer("heima"); sb1.replace(0, 3, "bai"); System.out.println(sb1); sb1.reverse(); System.out.println(sb1); } }
StringBuffer的截取功能
public class demo5_StringBuffer { /* public StringBuffer subString(int start): * 从指定位置截取到末尾 * public StringBuffer subString(int start,int end): * 截取从指定位置开始到结束位置,包括开始位置,不包括结束位置 * * 注意:返回值类型不再是StringBuffer本身 * */ public static void main(String[] args) { StringBuffer sb1=new StringBuffer("woaiheima"); //String str =sb1.substring(4); //System.out.println(str); String str2 =sb1.substring(4, 9); System.out.println(str2); } }
StringBuffer和String的相互转换
public class demo6_StringBuffer { public static void main(String[] args) { //demo1(); String 转 StringBuffer StringBuffer sb1=new StringBuffer("woaiheima"); String s1=new String(sb1);//StringBuffer转String System.out.println(s1); System.out.println(s1.toString()); //通过toString方法将StringBuffer转String String s2=sb1.substring(0,sb1.length()); System.out.println(s2); //通过截取字符串将StringBuffer转换为String } private static void demo1() { StringBuffer sb1=new StringBuffer("woaiheima"); //通过构造方法将字符串转换为StringBuffer对象 System.out.println(sb1); StringBuffer sb2=new StringBuffer(); //通过append方法将字符串转化为StringBuffer对象 sb2.append("heima"); System.out.println(sb2); } }
package tan.jung.test; public class test1 { public static void main(String[] args) { int [] arr={1,2,3}; System.out.println(array2String(arr)); } public static String array2String(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]).append("]"); }else{ sb1.append(arr[i]).append(","); } } return sb1.toString(); } }
package tan.jung.test; import java.util.Scanner; public class test2 { public static void main(String[] args) { Scanner sc =new Scanner(System.in); System.out.println("请输入数据"); String line=sc.nextLine(); // StringBuffer sb1=new StringBuffer(line); // sb1.reverse(); // System.out.println(sb1); System.out.println(array2String(line)); //调用了array2String(String line)的结果 } public static String array2String(String line){ StringBuffer sb2 = new StringBuffer(line); sb2.reverse(); return sb2.toString(); } }
StringBuffer和StringBuilder
StringBuffer是jbk1.0版本的,是线程安全的,效率低
StringBuilder是jdk1.5版本的,是线程不全安的,效率高
String是一个不可变的字符序列
StringBuffer,StringBuilder 是可变的字符序列
public class demo7_StringBuffer { /* 形式参数问题 * String作为参数传递 * StringBuffer作为参数传递 * * 基本数据类型的值传递,不改变其值 * 引用数据类型的值传递,可以改变其值 * * String类虽然是引用数据类型,但是他作为参数传递是和基本数据类型是一样的 * */ public static void main(String[] args) { String s="heima"; System.out.println(s); Change(s); System.out.println(s); StringBuffer sb =new StringBuffer(); sb.append("heima"); System.out.println(sb); Change(sb); System.out.println(sb); } public static void Change(StringBuffer sb) { sb.append("baima"); } public static void Change(String s) { s +="itcast"; } }