[常用类]StringBuffer 类,以及 StringBuilder 类

线程安全,可变的字符序列。 字符串缓冲区就像一个String ,但可以修改。 在任何时间点,它包含一些特定的字符序列,但可以通过某些方法调用来更改序列的长度和内容。

字符串缓冲区可以安全地被多个线程使用。 这些方法在必要时进行同步,以便任何特定实例上的所有操作都按照与所涉及的各个线程所执行的方法调用顺序一致的顺序发生。

StringBuffer的主要是appendinsert方法,它们被重载以便接受任何类型的数据。

每个字符串缓冲区都有一个容量。 只要字符串缓冲区中包含的字符序列的长度不超过容量,就不必分配新的内部缓冲区数组。 如果内部缓冲区溢出,则会自动变大。

除非另有说明,否则将null参数传递给null中的构造函数或方法将导致抛出NullPointerException

1 public StringBuffer()     //构造一个没有字符的字符串缓冲区,初始容量为16个字符。
1 public StringBuffer(int capacity)构造一个没有字符的字符串缓冲区和指定的初始容量。 
2 参数 
3 capacity - 初始容量。 
4 异常 
5 NegativeArraySizeException - 如果 capacity参数小于 0 。 
1 public StringBuffer(String str)    //构造一个初始化为指定字符串内容的字符串缓冲区。 字符串缓冲区的初始容量为16加上字符串参数的长度2 参数 
3 str - 缓冲区的初始内容。

方法:

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

1 public StringBuffer deleteCharAt(int index) //删除char在这个序列中的指定位置。 该序列缩短了一个char 。 
2 注意:如果给定索引处的字符是补充字符,则此方法不会删除整个字符。 如果需要的准确处理增补字符,确定数量char通过调用删除Character.charCount(thisSequence.codePointAt(index)) ,其中thisSequence是此序列。 
1 sb.delete(0, sb.length());  //清空缓存区,这样该区域还可以再使用
2 
3 //不要用新建一个StringBuffer 对象的办法来清空缓存区,原来的区域会变成垃圾,浪费内存

StringBuffer 的替换功能 replace

        反转功能 reverse

        截取功能 substring ,截取从指定位置到结束位置,包括开始位置,不包括结束位置。

           注意:返回值不再是 StringBuffer本身,而是一个String


StringBuffer 和 String 对象相互转化:

  String 转化为 StringBuffer:

  ·StringBuffer 转换为 String:


之所以要用到StringBuffer 和 String 对象相互转化,是因为 一方面 StringBuffer 的拼接是同一个对象,字符串缓冲区内不断添加,不会产生垃圾;而 String的拼接是不断产生新的对象,常量池不断产生垃圾,浪费内存。而且StringBuffer的一些方法很好用,比如 reverse(),所以 可以先用StringBuffer操作,最后再转换成String对象。


 StringBuilder 类

String和StringBuffer作为形参传递:

第二个 syso 输出的 仍然是 ”heima“

 

这里会输出 heimaitcast


 1 public class Test1 {
 2 
 3     /**
 4      * @param args
 5      * * A:案例演示
 6      * 需求:我有如下一个字符串:”91 27 46 38 50”,请写代码实现最终输出结果是:”27 38 46 50 91”
 7      * 100
 8      * 80
 9      * 分析:
10      * 1,将字符串切割成字符串数组
11      * 2,将字符串转换成数字并将其存储在一个等长度的int数组中
12      * 3,排序
13      * 4,将排序后的结果遍历并拼接成一个字符串
14      */
15     public static void main(String[] args) {
16         String s = "91 27 46 38 50";
17         //1,将字符串切割成字符串数组
18         String[] sArr = s.split(" ");
19         //2,将字符串转换成数字并将其存储在一个等长度的int数组中
20         int[] arr = new int[sArr.length];
21         for (int i = 0; i < arr.length; i++) {
22             arr[i] = Integer.parseInt(sArr[i]);     //将数字字符串转换成数字
23         }
24         
25         //3,排序
26         Arrays.sort(arr);
27         
28         //4,将排序后的结果遍历并拼接成一个字符串27 38 46 50 91
29         /*String str = "";
30         for (int i = 0; i < arr.length; i++) {
31             if(i == arr.length - 1) {
32                 str = str + arr[i];                //27 38 46 50 91  产生很多个对象str,垃圾
33             }else {
34                 str = str + arr[i] + " ";        //27 38 46 50 
35             }
36         }
37         
38         System.out.println(str);*/
39         
40         StringBuilder sb = new StringBuilder();
41         for (int i = 0; i < arr.length; i++) {
42             if(i == arr.length - 1) {
43                 sb.append(arr[i]);
44             }else {
45                 sb.append(arr[i] + " ");
46             }
47         }
48         
49         System.out.println(sb);
50     }
51 
52 }
原文地址:https://www.cnblogs.com/gaoyang666/p/11135513.html