Java学习总结--021StringBuffer类 +StringBuilder类

StringBuffer类

由于字符串一旦定义之后,长度是不可变的,如果我要采用+号大量拼串,比较浪费空间。
Java为我们提供StringBuffer这个类,是一个长度可变的字符容器,可以存储多个字符,可以不断的往容器中追加内容。

1.安全问题

线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。、,但通过某些方法调用可以改变该序列的长度和内容。

2.StringBuffer和String的区别

StringBuffer是线程安全的,但效率特别低的可变字符串。
String是不可改变的字符串,不是线程安全的。

3.StringBuffer类的构造方法

A:StringBuffer的构造方法:
public StringBuffer(): 无参构造方法;
public StringBuffer(int capacity): 指定容量的字符串缓冲区对象;
public StringBuffer(String str): 指定字符串内容的字符串缓冲区对象;

B:StringBuffer的方法:
public int capacity():返回当前容量。 理论值
public int length():返回长度(字符数)。 实际值

4.StringBuffer的添加功能

public StringBuffer append(String str): 可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身;
public StringBuffer insert(int offset,String str):在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身;

public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
        sb.append(100).append(200);
        //在指定的索引处插入内容
        sb.insert(1, "abc");//返回的还是原来的容器
        System.out.println(sb);
    }
}

5.StringBuffer的删除功能

public StringBuffer deleteCharAt(int index):删除指定位置的字符,并返回本身
public StringBuffer delete(int start,int end):删除从指定位置开始指定位置结束的内容,并返回本身

public static void main(String[] args) {
        //删除相关的方法
        StringBuffer sb = new StringBuffer("abcafeadsfaewfasdf你好啊");
        //根据指定索引删除单个字符,返回的还是容器本身
        sb.deleteCharAt(0);
        sb.delete(0, sb.length());//根据开始索引,和结束索引删除一段数据 含头不含尾 返回的还是容器本身
        System.out.println(sb);
    }
}

6.StringBuffer的替换和反转功能

A:StringBuffer的替换功能
public StringBuffer replace(int start,int end,String str): 从start开始到end用str替换
B:StringBuffer的反转功能
public StringBuffer reverse(): 字符串反转

public class MyTest3 {
    public static void main(String[] args) {
        //替换的方法
        StringBuffer sb = new StringBuffer("abc ccc ddd fff");
        //从开始索引,到结束索引,替换成新的内容,返回的还是容器本身
        sb.replace(0, sb.length(), sb.toString().substring(0,sb.indexOf(" ")));
        System.out.println(sb);
    }
}
public class MyTest4 {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer("abcd");
        //反转容器中的内容,返回的还是容器本身
         sb.reverse();
        System.out.println(sb);
    }
}

7.StringBuffer的截取功能

public String substring(int start): 从指定位置截取到末尾
public String substring(int start,int end): 截取从指定位置开始到结束位置,包括开始位置,不包括结束位置
注意:返回值类型不再是StringBuffer本身;

8.StringBuffer和String的相互转换

A:String – StringBuffer
a:通过构造方法
b:通过append()方法
B:StringBuffer – String
a: 使用substring方法
b:通过构造方法
c:通过toString()方法

public class MyTest {
    public static void main(String[] args) {
        //String-- StringBuffer
        String str="abc";
        //方式1
        StringBuffer sb = new StringBuffer(str);
        //方式2
        StringBuffer sb2 = new StringBuffer().append(str);
        StringBuffer sb3 = new StringBuffer().insert(0, str);
        StringBuffer sb4 = sb.replace(0, str.length(), str);

        //StringBuffer----String
        StringBuffer sb5= new StringBuffer("abc");
        //方式1
        String string = sb5.toString();
        //方式2
        String substring = sb5.substring(0);
        //方式3
        //String(StringBuffer buffer)
        //分配一个新的字符串,它包含字符串缓冲区参数中当前包含的字符序列。
        String s = new String(sb5);
    }
}

9.把数组转成字符串

需求:把数组中的数据按照指定个格式拼接成一个字符串。

public class MyTest {
    public static void main(String[] args) {
        //需求:把数组中的数据按照指定个格式拼接成一个字符串
        //举例:
        //int[] arr = {1, 2, 3};
        //输出结果:
        //用StringBuffer的功能实现
        int[] arr = {1, 2, 3};
        //"[1, 2, 3]"
        StringBuffer sb = new StringBuffer("[");
        for (int i = 0; i < arr.length; i++) {
            if(i==arr.length-1){
                sb.append(arr[i]).append("]");
            }else{
                sb.append(arr[i]).append(",");
            }
        }
        String string = sb.toString();
        System.out.println(string);
    }
}

10.字符串反转

需求:把字符串反转
举例:键盘录入"abc"
输出结果:“cba”
用StringBuffer的功能实现

public class MyTest2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串");
        String str = sc.nextLine();
        StringBuffer sb = new StringBuffer(str);
        String string = sb.reverse().toString();
        System.out.println(string);
    }
}

11.StringBuffer和StringBuilder的区别

StringBuffer 字符串缓冲区 线程安全的 效率低;
StringBuilder 字符串缓冲区 线程不安全 效率高;
一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换;
用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。

12.String和StringBuffer分别作为参数传递

String作为参数传递 String虽然是引用类型,但是它是一个常量,所以在做传递的时候,完全可以将其看成基本数据类型数据进行传递;
基本类型作为参数传递,形参的改变,不影响实参;
引用类型作为参数传递,形参的改变,会影响实参;
值传递,引用传递;
String 类型作为参数传递,跟基本类型一样;

public class MyTest {
    public static void main(String[] args) {
        String str = "abc";
        setString(str);
        System.out.println(str); //2 "abc"
        StringBuffer sb = new StringBuffer("你好世界");
        setStringBuffer(sb);
        System.out.println(sb.toString());//
    }
    private static void setStringBuffer(StringBuffer sb) {
        sb.append("爱生活,爱Java").reverse();
    }
    private static void setString(String str) {
        str = str + "dddd";
        System.out.println(str); // 1 "abcdddd"
    }
}

猜你喜欢

转载自blog.csdn.net/web116629/article/details/89856222
今日推荐