10.1常用类(StringBuffer类)

来源:互联网 发布:西安软件新城地址 编辑:程序博客网 时间:2024/06/05 22:33

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;

 }

}

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 4个月睡眠倒退期怎么办 科三五次没通过怎么办 打架时被抱住了怎么办 炸猫耳朵不脆怎么办 五个月宝宝脖子有点歪怎么办 婆婆不给带孩子怎么办 脚冻了怎么办 小妙招 pdf转word后乱码怎么办 李氏根源用多了怎么办 pdf在wps中打开怎么办 小孩刚上幼儿园哭闹怎么办 一到冬天皮肤痒怎么办 87岁老人身上痒怎么办 天刀技能拖不动怎么办 晚上不吃饭饿了怎么办 虚火引起的牙疼怎么办 吃上火了牙疼怎么办 慢性胃炎引起的口臭怎么办 烂牙引起的口臭怎么办 坏牙引起的口臭怎么办 牙齿拔了有口臭怎么办 胃疼连着后背疼怎么办 肚脐眼又红又痒怎么办 三岁宝宝有口臭怎么办 脚扭了按压疼痛怎么办 喝完酒头晕5天了怎么办 三岁宝宝口气重怎么办 肠镜检查出息肉怎么办 怀孕了口气很重怎么办 脚被重物压肿了怎么办 摔倒膝盖肿了应该怎么办 脚挤压伤肿了怎么办 30岁后脸上长斑怎么办 12岁脸上有雀斑怎么办 16岁脸上有斑怎么办 脸上有斑怎么办 教你 4o岁脸上有色斑怎么办 小孩三年级成绩都差怎么办 孕晚期头大腿短怎么办 天天p图格式不对怎么办 橡胶枕头太高了怎么办