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程序设计有所帮助。