线程安全,可变的字符序列。 字符串缓冲区就像一个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);
} }

[常用类]StringBuffer 类,以及 StringBuilder 类的更多相关文章

  1. java -> StringBuffer与StringBuilder类

    字符串缓冲区 StringBuffer类 在学习String类时,API中说字符串缓冲区支持可变的字符串,什么是字符串缓冲区呢?接下来我们来研究下字符串缓冲区. 查阅StringBuffer的API, ...

  2. C#笔记2__Char类、String类、StringBuilder类 / 正则表达式 /

    Char类 String类 字符串的格式化:String类的Format方法 StringBuilder类 以上:百度 or 查手册.....

  3. java常用类与包装类--常用类字符串String类、StringBuffer类、Stringbuilder类

    1.String类 1.1String类的概念和储存结构: (1)字符串是一个比较特殊的对象,可以使用new,也可以不使用new来创建字符串对象 String s1 = new String(&quo ...

  4. java常用类,包装类,String类的理解和创建对象以及StringBuilder和StringBuffer之间的区别联系

    一.包装类的分类: 1.黄色部分的父类为Number 继承关系: Boolean Character 其他六个基本数据类型 2.装箱和拆箱 理解:一个例子,其他的都相同 装箱:Integer inte ...

  5. 总结 String、StringBuffer与StringBuilder类中常用的方法

    一.String类的常用方法 1.获取: 1)获取字符串str长度 int i = str.length(); 2)根据位置(index)获取字符 char c = str.charAt(index) ...

  6. Java 常用类——StringBuffer&StringBuilder【可变字符序列】

    一.字符串拼接问题 由于 String 类的对象内容不可改变,所以每当进行字符串拼接时,总是会在内存中创建一个新的对象. Demo: 1 public class StringDemo { 2 pub ...

  7. (1)StringBuilder类和StringBuffer类 (2)日期相关的类 (3)集合框架 (4)List集合

    1.StringBuilder类和StringBuffer类(查手册会用即可)1.1 基本概念 由于String类描述的字符串内容无法更改,若程序中出现大量类似的字符串时需要申请独立的内存空间单独保存 ...

  8. Java基础-StringBuffer类与StringBuilder类简介

    Java基础-StringBuffer类与StringBuilder类简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.StringBuffer类 在学习过String类之后 ...

  9. 【学习笔记】String进阶:StringBuffer类(线程安全)和StringBuilder类

    一.除了使用String类存储字符串之外,还可以使用StringBuffer类存储字符串.而且它是比String类更高效的存储字符串的一种引用数据类型. 优点: 对字符串进行连接操作时,使用Strin ...

随机推荐

  1. Jmeter性能测试请求超时:目前遇见有三种情况

    1.请求连接超时.连不上服务器.一般是因为线程太多 2.连接成功,但是读取超时.等不到服务器返回的数据,一般是这次请求查询的量很大,比如查了5度的顶点.(timeout小于server的最大等待时间) ...

  2. 带加载进度的Web图片懒加载组件Lazyload

    在Web项目中,大量的图片应用会导致页面加载时间过长,浪费不必要的带宽成本,还会影响用户浏览体验. Lazyload 是一个文件大小仅4kb的图片懒加载组件(不依赖其它第三方库),组件会根据用户当前浏 ...

  3. python如何导入自定义文件和模块$PYTHONHOME$\Lib\site-packages 方法

    python 中如何引用自己创建的源文件(*.py)呢? 也就是所谓的模块. 假如,你有一个自定义的源文件,文件名:saySomething.py .里面有个函数,函数名:sayHello.如下图: ...

  4. 多个excel文件内容合并到一个excel文件的多个sheet的小程序

    # -*- coding:utf-8 -*- import xlrd, xlsxwriter # 待合并excelallxls = ["D:\\excelcs\\***.xlsx" ...

  5. SpringCloud学习系列-Eureka服务注册与发现(4)

    actuator与注册微服务信息完善 1.主机名称:服务名称修改 当前问题 含有主机名称 修改修改microservicecloud-provider-dept-8001 的yml文件 修改内容 eu ...

  6. Python3 install pip

    原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/12033910.html curl https://bootstrap.pypa.io/get-pip. ...

  7. LeetCode--096--不同的二叉搜索树(python)

    我的思路比较low直接看官方题解吧... class Solution: def numTrees(self, n: int) -> int: G = [0] * (n+1) G[0],G[1] ...

  8. 【JavaScript】 模拟JQuery的连续调用函数

    连续调用,了解调用主体 var zhangsan = { smoke: function () { console.log("Smoking..."); return this; ...

  9. JavaScript 练习

    搜索框 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...

  10. 使用mongodb

    1.安装 yarn add moogose 2.启动 在命令行 mongod --dbpath D:\data//这是最后出现 waiting for connections on port 2701 ...