10.1常用类(StringBuffer类)

StringBuffer类概述及其构造方法


1StringBuffer概述:构造一个字符串缓冲区,可变字符序列,线程安全的!

【线程安全】(多线程的一个范畴)

线程:是依赖于进程而存在!

线程的安全------>同步了---->效率低   举例:银行的网站,医院的网站

线程不安全----->不同步---->效率高    举例:论坛之类的网站,新闻类的网站

2StringBuffer的构造方法:

publicStringBuffer()构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符

publicStringBuffer(int capacity)构造一个不带字符,但具有指定初始容量的字符串缓冲区。

publicStringBuffer(String str)构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。该字符串的初始容量为 16 加上字符串参数的长度。

特有的方法:

public int capacity():返回当前容量

public int length():获取字符串缓冲区的长度

3StringBuffer类的成员方法:

StringBuffer的添加功能:

publicStringBuffer append(String str)追加,可以添加任何数据类型

publicStringBuffer insert(int offset,String str)在指定位置插入一个新的字符串str

insert:插入,和后面MySQL数据库中一个插入数据的语法很相似

StringBuffer的删除功能:

publicStringBuffer deleteCharAt(int index)删除指定位置处的字符,返回字符串缓冲区本身

publicStringBuffer delete(int start,int end)删除从指定位置开始,到指定位置接收,包前不包后,返回字符串缓冲区本身

StringBuffer的替换功能:

publicStringBuffer replace(int start,int end,String str)Str这个字符串替换此字符串中从指定索引开始到指定索引处结束(包前不包后)的字符,返回字符串缓冲区本身

StringBuffer的反转功能:

publicStringBuffer reverse()返回的还是字符串缓冲区本身

StringBuffer的截取功能:

publicString substring(int start)

publicString substring(int start,int end)

String类的功能是一样的,注意:返回值类型发生变化了,截取之后,返回一个新的字符串

截取功能和前面几个功能的不同:返回值类型是String类型,本身没有发生改变

4StringBufferString之间的类型转换问题:

学习类之间的转换的作用:

A---->B类,是为了使用B类的功能

B---->A类,B类类型并不是我想要的,所以还需要转回去!

程序举例:

public class StringBufferTest {

      publicstatic void main(String[] args) {

           //String----->StringBuffer类型

           //定义一个字符串:

           Strings = "hello" ;

          

//         StringBuffersb = s ;

//         StringBuffer sb = "hello" ;

          

           //方式1):构造方式:StringBuffer(String str)

           StringBuffersb = new StringBuffer(s) ;

          

           //方式2):可以空参构造方法和append()相结合

           StringBuffersb2 = new StringBuffer() ;

           sb2.append(s);

          

           System.out.println("sb2:"+sb2);

           System.out.println("sb:"+sb);

          

           System.out.println("---------------------------");

          

           //StringBuffer---->String

           //构造字符串缓冲区对象

           StringBufferbuffer = new StringBuffer("hello") ;

           //方式1:public String(StringBuffer buffer)

           Strings1 = new String(buffer) ;

          

           //方式2:public String toString()

           Strings2 = buffer.toString() ;

           System.out.println("s1:"+s1);

           System.out.println("s2:"+s2);

      }

}

5)【两个面试题】

1)String,StringBuffer,StringBuilder的区别?

String:构造一个字符串常量池(不可变的字符序列),一旦被赋值,其值不能被改变!(重要的特点:也被用来当做形式参数传递:又和基本数据类型作为值传递是一样的)

StringBuffer:构造一个字符串缓冲区(字符串缓冲池),可变的字符序列,线程安全,效率

StringBuilder是用来替代StringBuffer(指的是在单线程中替代比较多),它和StringBuffer兼容的API(StringBuffer有的功能StringBuilder都具有)可变的字符序列,线程不安全,效率高!一般情况,单线程中使用StringBuilder去构造字符串缓冲区!

2)StringBuffer和数组的区别?

共同点:都可以看做是一个容器!

StringBuffer:最终得到的数据还是字符串类型

数组:可以存储多种类型的元素,必须保证元素的类型一致的!

StringStringBuffer都可以作为形式参数进行传递!

注意:

String类型它是一种特殊的引用类型,作为形式参数传递,和基本数据类型的效果是一样的!

程序理解:

public class StringBufferDemo {

      publicstatic void main(String[] args) {

           //定义两个字符串

           Strings1 = "hello" ;

           Strings2 = "world" ;

          

           System.out.println(s1+"-----"+s2);//hello-----world

           //写一个方法

           change(s1,s2);

           System.out.println(s1+"-----"+s2);//hello----world

          

          

           StringBuffersb1 = new StringBuffer("hello") ;

           StringBuffersb2 = new StringBuffer("world") ;

           System.out.println(sb1+"-----"+sb2);//hello----world

           change2(sb1,sb2);

           System.out.println(sb1+"-----"+sb2);//hello--worldworld

      }

     

      publicstatic void change(String s1,String s2){

           s1= s2 ;

           s2= s1 +s2 ;

      }

     

      publicstatic void change2(StringBuffer sb1,StringBuffer sb2) {

           sb1= sb2 ;

           sb2.append(sb1);

      }

}

6)判断一个字符串是否是对称字符串

程序如下:

import java.util.Scanner;

public class Judgedemo {

      publicstatic void main(String[] args) {

 

      //创建键盘录入对象

      Scannersc=new Scanner(System.in);

      //录入并接收数据

      System.out.println("请输入字符串:");

   String s=sc.nextLine();

   

   //法一:StringBuffer的反转功能

   boolean flag=Judge(s);

   System.out.println("flag:"+flag);  

  //法二://一个一个的比

   boolean flag2=Judge2(s);

   System.out.println("flag2:"+flag2);

}

 

//StringBuffer的反转功能

public static boolean Judge(String s){

//   StringBuffersb=new StringBuffer();

//   if(sb.append(s).reverse().toString().equals(s)){

//   returntrue;

//         }else{

//         returnfalse;

//         }

//    }

  //简化版

      returnnew StringBuffer(s).reverse().toString().equals(s);

  }

 

//一个一个的比

public static boolean Judge2(Strings){

// boolean flag=true;  

      char[]ch=s.toCharArray();

      for(intstart=0,end=ch.length-1;start<end;start++,end--){

           if(ch[start]!=ch[end]){

//         flag=false;

//              break;

                 returnfalse;

                 }

           }returntrue;

 }

}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值