Java StringBuffer类与StringBuilder类用法实例小结
本文实例总结了JavaStringBuffer类与StringBuilder类用法。分享给大家供大家参考,具体如下:
StringBuffer类的构造方法
packagecn.itcast_01; /* *线程安全(多线程讲解) *安全--同步--数据是安全的 *不安全--不同步--效率高一些 *安全和效率问题是永远困扰我们的问题。 *安全:医院的网站,银行网站 *效率:新闻网站,论坛之类的 * *StringBuffer: *线程安全的可变字符串。 * *StringBuffer和String的区别? *前者长度和内容可变,后者不可变。 *如果使用前者做字符串的拼接,不会浪费太多的资源。 * *StringBuffer的构造方法: *publicStringBuffer():无参构造方法 *publicStringBuffer(intcapacity):指定容量的字符串缓冲区对象 *publicStringBuffer(Stringstr):指定字符串内容的字符串缓冲区对象 * *StringBuffer的方法: *publicintcapacity():返回当前容量。理论值 *publicintlength():返回长度(字符数)。实际值 */ publicclassStringBufferDemo{ publicstaticvoidmain(String[]args){ //publicStringBuffer():无参构造方法 StringBuffersb=newStringBuffer(); System.out.println("sb:"+sb); System.out.println("sb.capacity():"+sb.capacity()); System.out.println("sb.length():"+sb.length()); System.out.println("--------------------------"); //publicStringBuffer(intcapacity):指定容量的字符串缓冲区对象 StringBuffersb2=newStringBuffer(50); System.out.println("sb2:"+sb2); System.out.println("sb2.capacity():"+sb2.capacity()); System.out.println("sb2.length():"+sb2.length()); System.out.println("--------------------------"); //publicStringBuffer(Stringstr):指定字符串内容的字符串缓冲区对象 StringBuffersb3=newStringBuffer("hello"); System.out.println("sb3:"+sb3); System.out.println("sb3.capacity():"+sb3.capacity());//16+5 System.out.println("sb3.length():"+sb3.length()); } }
StringBuffer的添加功能:
packagecn.itcast_02; /* *StringBuffer的添加功能: *publicStringBufferappend(Stringstr):可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身 * *publicStringBufferinsert(intoffset,Stringstr):在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身 */ publicclassStringBufferDemo{ publicstaticvoidmain(String[]args){ //创建字符串缓冲区对象 StringBuffersb=newStringBuffer(); //publicStringBufferappend(Stringstr) StringBuffersb2=sb.append("hello"); System.out.println("sb:"+sb); System.out.println("sb2:"+sb2); System.out.println(sb==sb2);//true //一步一步的添加数据 //sb.append("hello"); //sb.append(true); //sb.append(12); //sb.append(34.56); //链式编程 sb.append("hello").append(true).append(12).append(34.56); System.out.println("sb:"+sb); //publicStringBufferinsert(intoffset,String //str):在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身 sb.insert(5,"world"); System.out.println("sb:"+sb); } }
StringBuffer的删除功能
packagecn.itcast_03; /* *StringBuffer的删除功能 *publicStringBufferdeleteCharAt(intindex):删除指定位置的字符,并返回本身 *publicStringBufferdelete(intstart,intend):删除从指定位置开始指定位置结束的内容,并返回本身 */ publicclassStringBufferDemo{ publicstaticvoidmain(String[]args){ //创建对象 StringBuffersb=newStringBuffer(); //添加功能 sb.append("hello").append("world").append("java"); System.out.println("sb:"+sb); //publicStringBufferdeleteCharAt(intindex):删除指定位置的字符,并返回本身 //需求:我要删除e这个字符,肿么办? //sb.deleteCharAt(1); //需求:我要删除第一个l这个字符,肿么办? //sb.deleteCharAt(1); //publicStringBufferdelete(intstart,int //end):删除从指定位置开始指定位置结束的内容,并返回本身 //需求:我要删除world这个字符串,肿么办? //sb.delete(5,10); //需求:我要删除所有的数据 sb.delete(0,sb.length()); System.out.println("sb:"+sb); } }
StringBuffer的替换功能:
packagecn.itcast_04; /* *StringBuffer的替换功能: *publicStringBufferreplace(intstart,intend,Stringstr):从start开始到end用str替换 */ publicclassStringBufferDemo{ publicstaticvoidmain(String[]args){ //创建字符串缓冲区对象 StringBuffersb=newStringBuffer(); //添加数据 sb.append("hello"); sb.append("world"); sb.append("java"); System.out.println("sb:"+sb); //publicStringBufferreplace(intstart,intend,String //str):从start开始到end用str替换 //需求:我要把world这个数据替换为"节日快乐" sb.replace(5,10,"节日快乐"); System.out.println("sb:"+sb); } }
StringBuffer的反转功能:
packagecn.itcast_05; /* *StringBuffer的反转功能: *publicStringBufferreverse() */ publicclassStringBufferDemo{ publicstaticvoidmain(String[]args){ //创建字符串缓冲区对象 StringBuffersb=newStringBuffer(); //添加数据 sb.append("霞青林爱我"); System.out.println("sb:"+sb); //publicStringBufferreverse() sb.reverse(); System.out.println("sb:"+sb); } }
StringBuffer的截取功能
packagecn.itcast_06; /* *StringBuffer的截取功能:注意返回值类型不再是StringBuffer本身了 *publicStringsubstring(intstart) *publicStringsubstring(intstart,intend) */ publicclassStringBufferDemo{ publicstaticvoidmain(String[]args){ //创建字符串缓冲区对象 StringBuffersb=newStringBuffer(); //添加元素 sb.append("hello").append("world").append("java"); System.out.println("sb:"+sb); //截取功能 //publicStringsubstring(intstart) Strings=sb.substring(5); System.out.println("s:"+s); System.out.println("sb:"+sb); //publicStringsubstring(intstart,intend) Stringss=sb.substring(5,10); System.out.println("ss:"+ss); System.out.println("sb:"+sb); } }
String和StringBuffer的相互转换?
packagecn.itcast_07; /* *为什么我们要讲解类之间的转换: *A--B的转换 *我们把A转换为B,其实是为了使用B的功能。 *B--A的转换 *我们可能要的结果是A类型,所以还得转回来。 * *String和StringBuffer的相互转换? */ publicclassStringBufferTest{ publicstaticvoidmain(String[]args){ //String--StringBuffer Strings="hello"; //注意:不能把字符串的值直接赋值给StringBuffer //StringBuffersb="hello";//这个写法错误 //StringBuffersb=s; //方式1:通过构造方法 StringBuffersb=newStringBuffer(s); //方式2:通过append()方法 StringBuffersb2=newStringBuffer(); sb2.append(s); System.out.println("sb:"+sb); System.out.println("sb2:"+sb2); System.out.println("---------------"); //StringBuffer--String StringBufferbuffer=newStringBuffer("java"); //String(StringBufferbuffer) //方式1:通过构造方法 Stringstr=newString(buffer); //方式2:通过toString()方法 Stringstr2=buffer.toString(); System.out.println("str:"+str); System.out.println("str2:"+str2); } }
使用StringBuffer把数组拼接成一个字符串
packagecn.itcast_07; /* *把数组拼接成一个字符串 */ publicclassStringBufferTest2{ publicstaticvoidmain(String[]args){ //定义一个数组 int[]arr={44,33,55,11,22}; //定义功能 //方式1:用String做拼接的方式 Strings1=arrayToString(arr); System.out.println("s1:"+s1); //方式2:用StringBuffer做拼接的方式 Strings2=arrayToString2(arr); System.out.println("s2:"+s2); } //用StringBuffer做拼接的方式 publicstaticStringarrayToString2(int[]arr){ StringBuffersb=newStringBuffer(); sb.append("["); for(intx=0;x把字符串反转
packagecn.itcast_07; importjava.util.Scanner; /* *把字符串反转 */ publicclassStringBufferTest3{ publicstaticvoidmain(String[]args){ //键盘录入数据 Scannersc=newScanner(System.in); System.out.println("请输入数据:"); Strings=sc.nextLine(); //方式1:用String做拼接 Strings1=myReverse(s); System.out.println("s1:"+s1); //方式2:用StringBuffer的reverse()功能 Strings2=myReverse2(s); System.out.println("s2:"+s2); } //用StringBuffer的reverse()功能 publicstaticStringmyReverse2(Strings){ returnnewStringBuffer(s).reverse().toString(); } //用String做拼接 publicstaticStringmyReverse(Strings){ Stringresult=""; char[]chs=s.toCharArray(); for(intx=chs.length-1;x>=0;x--){ result+=chs[x]; } returnresult; } }判断一个字符串是否是对称字符串
packagecn.itcast_07; importjava.util.Scanner; /* *判断一个字符串是否是对称字符串 *例如"abc"不是对称字符串,"aba"、"abba"、"aaa"、"mnanm"是对称字符串 * *分析: *判断一个字符串是否是对称的字符串,我只需要把 *第一个和最后一个比较 *第二个和倒数第二个比较 *... *比较的次数是长度除以2。 */ publicclassStringBufferTest4{ publicstaticvoidmain(String[]args){ //创建键盘录入对象 Scannersc=newScanner(System.in); System.out.println("请输入一个字符串:"); Strings=sc.nextLine(); //一个一个的比较 booleanb=isSame(s); System.out.println("b:"+b); //用字符串缓冲区的反转功能 booleanb2=isSame2(s); System.out.println("b2:"+b2); } //用字符串缓冲区的反转功能 publicstaticbooleanisSame2(Strings){ returnnewStringBuffer(s).reverse().toString().equals(s); } //一个一个的比较 publicstaticbooleanisSame(Strings){ booleanflag=true; //把字符串转成字符数组 char[]chs=s.toCharArray(); for(intstart=0,end=chs.length-1;start<=end;start++,end--){ if(chs[start]!=chs[end]){ flag=false; break; } } returnflag; } }String,StringBuffer,StringBuilder的区别?
packagecn.itcast_08; /* *面试题: *1:String,StringBuffer,StringBuilder的区别? *A:String是内容不可变的,而StringBuffer,StringBuilder都是内容可变的。 *B:StringBuffer是同步的,数据安全,效率低;StringBuilder是不同步的,数据不安全,效率高 * *2:StringBuffer和数组的区别? *二者都可以看出是一个容器,装其他的数据。 *但是呢,StringBuffer的数据最终是一个字符串数据。 *而数组可以放置多种数据,但必须是同一种数据类型的。 * *3:形式参数问题 *String作为参数传递 *StringBuffer作为参数传递 * *形式参数: *基本类型:形式参数的改变不影响实际参数 *引用类型:形式参数的改变直接影响实际参数 * *注意: *String作为参数传递,效果和基本类型作为参数传递是一样的。虽然String是特殊的引用类型,但是可以看成基本类型 */ publicclassStringBufferDemo{ publicstaticvoidmain(String[]args){ Strings1="hello"; Strings2="world"; System.out.println(s1+"---"+s2);//hello---world change(s1,s2); System.out.println(s1+"---"+s2);//hello---world StringBuffersb1=newStringBuffer("hello"); StringBuffersb2=newStringBuffer("world"); System.out.println(sb1+"---"+sb2);//hello---world change(sb1,sb2); System.out.println(sb1+"---"+sb2);//hello---worldworld } publicstaticvoidchange(StringBuffersb1,StringBuffersb2){ sb1=sb2;//直接赋值不会改变外面的sb1 sb2.append(sb1);//作操作会改变 } publicstaticvoidchange(Strings1,Strings2){ s1=s2; s2=s1+s2; } }更多关于java相关内容感兴趣的读者可查看本站专题:《Java字符与字符串操作技巧总结》、《Java数组操作技巧总结》、《Java数学运算技巧总结》、《Java数据结构与算法教程》及《Java操作DOM节点技巧总结》
希望本文所述对大家java程序设计有所帮助。