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

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

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

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

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

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

方法:

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

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

 //不要用新建一个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


 public class Test1 {

     /**
* @param args
* * A:案例演示
* 需求:我有如下一个字符串:”91 27 46 38 50”,请写代码实现最终输出结果是:”27 38 46 50 91”
* 100
* 80
* 分析:
* 1,将字符串切割成字符串数组
* 2,将字符串转换成数字并将其存储在一个等长度的int数组中
* 3,排序
* 4,将排序后的结果遍历并拼接成一个字符串
*/
public static void main(String[] args) {
String s = "91 27 46 38 50";
//1,将字符串切割成字符串数组
String[] sArr = s.split(" ");
//2,将字符串转换成数字并将其存储在一个等长度的int数组中
int[] arr = new int[sArr.length];
for (int i = 0; i < arr.length; i++) {
arr[i] = Integer.parseInt(sArr[i]); //将数字字符串转换成数字
} //3,排序
Arrays.sort(arr); //4,将排序后的结果遍历并拼接成一个字符串27 38 46 50 91
/*String str = "";
for (int i = 0; i < arr.length; i++) {
if(i == arr.length - 1) {
str = str + arr[i]; //27 38 46 50 91 产生很多个对象str,垃圾
}else {
str = str + arr[i] + " "; //27 38 46 50
}
} System.out.println(str);*/ StringBuilder sb = new StringBuilder();
for (int i = 0; i < arr.length; i++) {
if(i == arr.length - 1) {
sb.append(arr[i]);
}else {
sb.append(arr[i] + " ");
}
} System.out.println(sb);
} }

最新文章

  1. CentOS 6.6 升级GCC G++ (当前最新版本为v6.1.0) (完整)
  2. java中scanner类的用法
  3. ubuntu14上安装ros教程
  4. [转] 基于ArcGISServer实现活动地图标注
  5. virtualbox安装增强包及配置共享文件夹
  6. JS中字符串拼装 单双引号的处理 字符转义
  7. 八皇后问题-回溯法(MATLAB)
  8. error -27257: Pending web_reg_save_param/reg_find/create_html_param[_ex] request(s) detected and reset at the end of iteration number 1
  9. EasyUI基础searchbox&amp;amp;progressbar(搜索框,进度条)
  10. topshelf和quartz
  11. 请问如何在PS中将一张图标里的各个小图标分离成一个个图标?
  12. 联发科Helio P90(mt6779),P70(mt6775),P60(MT6771),P35,P22(MT6762)芯片参数规格
  13. 由ODI初始化资料档案库(RUC)引起修改ORACLE字符集(ZHS16GBK-AL32UTF8)
  14. ASP.NET实现二维码
  15. 餐饮ERP相关问题FAQ
  16. canvas-4createPattern.html
  17. oracle dataguard主从切换
  18. tcp付金卡黛珊李方军拉萨
  19. H&amp;M
  20. centos 安装 mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz 详细步骤

热门文章

  1. CF261E Maxim and Calculator (质数,完全背包)
  2. linux-lampweb
  3. AGC009题解
  4. Python---进阶---文件操作---获取文件夹下所有文件的数量和大小
  5. 使用Docker安装PaddlePaddle安装过程中出现的几个问题
  6. react native之封装离线缓存框架
  7. Http请求状态大全
  8. Xcode工程文件pbxproj
  9. Unity各版本差异
  10. python-笔记(操作excel)