1 StringBuffer类

概述

我们如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,又浪费空间。
而StringBuffer就可以解决这个问题
线程安全的可变字符序列

StringBuffer和String的区别

public class MyTest {public static void main(String[] args) {// StringBuffer 可变字符序列,他就相当于一个字符容器,可以不断的往容器中追加字符。String s1="abc";String s2="abaa";String s3=s1+s2;/*  StringBuffer()构造一个其中不带字符的字符串缓冲区,初始容量为 16 个字符。*/StringBuffer sb = new StringBuffer();int capacity = sb.capacity();System.out.println(capacity);//可以指定容量StringBuffer buffer = new StringBuffer(100);System.out.println(buffer.capacity());//往容器中追加内容sb.append("abc");int length = sb.length();System.out.println(length);}
}

1.1 构造方法

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

StringBuffer的方法

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

public class MyTest2 {public static void main(String[] args) {StringBuffer sb = new StringBuffer();System.out.println(sb.capacity());//往容器中追加内容,一旦超过容量,会自动扩容sb.append("abc阿斯顿发送到发斯蒂芬阿斯顿发斯蒂芬爱的发声的范阿斯顿发送到阿森松岛发上述的发到阿斯顿发送到");System.out.println(sb.length());//容量capacity() 长度length()//水杯(500ML capacity()) 实际你接了200ML的水 长度length()String s = sb.toString();System.out.println(s);System.out.println(s.length());}
}

案例演示

构造方法和长度方法的使用

public class MyTest3 {public static void main(String[] args) {StringBuffer sb = new StringBuffer();//返回的还是容器本身StringBuffer sb2 = sb.append(100);sb.append("2222").append(true).append("asdfasdf").append(3.25);System.out.println(sb2==sb);// StringBuffer 重写了toString()方法,把存在容器中的数据,转换成字符串返回String s = sb.toString();System.out.println(s);StringBuffer ssbb = new StringBuffer("abc");ssbb.append("asdfasdf").append("asdfasdfasdf").append("asdfasdfasdf");String s1 = ssbb.toString();System.out.println(s1);}
}

1.2 添加功能

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

案例演示

StringBuffer的添加功能

public class MyTest {public static void main(String[] args) {StringBuffer sb = new StringBuffer();sb.append("我爱你");//insert()王容器中指定位置插入内容,返回的还是原来那个容器sb.insert(0, "abc").insert(2,"你好");System.out.println(sb);}
}

1.3 删除功能

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

案例演示

StringBuffer的删除功能

public class MyTest {public static void main(String[] args) {StringBuffer sb = new StringBuffer();//根据索引删除某个字符,返回的还是容器本身sb.append("java学习和练习");sb.deleteCharAt(0);//根据起始索引和终止索引,删除一段内容,返回的还是容器本身sb.delete(0,5); //含头不含尾System.out.println(sb);}
}

1.4 替换和反转功能

替换功能

public StringBuffer replace(int start,int end,String str): 从start开始到end用str替换

反转功能

public StringBuffer reverse(): 字符串反转

案例演示

StringBuffer的替换和反转功能

public class MyTest2 {public static void main(String[] args) {StringBuffer sb = new StringBuffer();//根据索引删除某个字符,返回的还是容器本身sb.append("java学习");//根据起始索引和终止索引,替换容器中的某一部分内容,返回的还是容器本身,含头不含尾sb.replace(0, 3, "好好学习");System.out.println(sb);//反转容器中的内容,返回的还是容器本身sb.reverse();System.out.println(sb);}
}

从头查找该字符串,在容器中第一次出现的索引,如果找不到就返回-1
int indexOf (String str)
从指定索引处开始查找该字符串第一次出现的索引,如果找不到就返回-1
int indexOf (String str,int fromIndex)

从后往前找
int lastIndexOf (String str)
int lastIndexOf (String str,int fromIndex)

1.5 截取功能

public String substring(int start): 从指定位置截取到末尾
public String substring(int start,int end): 截取从指定位置开始到结束位置,包括开始位置,不包括结束位置

注意事项

注意:返回值类型不再是StringBuffer本身

案例演示

StringBuffer的截取功能及注意事项

public class MyTest3 {public static void main(String[] args) {StringBuffer sb = new StringBuffer("abcasdfasdfasdf");String s = sb.substring(0);//根据起始索引和终止索引,截取容器中的内容返回为字符串,含头不尾String s1 = sb.substring(0, 3);System.out.println(s);System.out.println(s1);}
}

1.6 StringBuffer和String的相互转换

String – StringBuffer

a:通过构造方法
b:通过append()方法

StringBuffer – String

a: 使用substring方法
b:通过构造方法
c:通过toString()方法

案例演示

StringBuffer和String的相互转换

public class MyTest {public static void main(String[] args) {//A://String-- StringBufferString str="abc";//方式1  通过构造方法StringBuffer sb = new StringBuffer(str);//方式2: 通过append()方法StringBuffer sb2 = new StringBuffer().append(str);//方式3  通过insert()方法StringBuffer sb3 = new StringBuffer().insert(0, str);//StringBuffer----StringStringBuffer sb9 = new StringBuffer("hahaha");//方式1       通过toString()方法String s = sb9.toString();//方式2      使用substring方法String s1 = sb9.substring(0);//方式3:    通过构造方法String s2 = new String(sb9);}
}

1.7 把数组转成字符串

案例演示

需求:把数组中的数据按照指定个格式拼接成一个字符串
  举例:
    int[] arr = {1,2,3};
  输出结果:
    “[1, 2, 3]”
用StringBuffer的功能实现

public class MyTest {public static void main(String[] args) {int[] arr = {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 s = sb.toString();System.out.println(s);}
}
public class MyTest2 {public static void main(String[] args) {int[] arr = {1, 2, 3};StringJoiner joiner = new StringJoiner(",", "[", "]");for (int i = 0; i < arr.length; i++) {joiner.add(arr[i] + "");}System.out.println(joiner.toString());}}

1.8 字符串反转

案例演示

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

public class MyTest2 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入字符串");String s = scanner.nextLine();String s1 = new StringBuffer(s).reverse().toString();System.out.println(s1);}
}

1.9 StringBuffer和StringBuilder的区别

StringBuilder的概述

通过查看API了解一下StringBuilder类

String,StringBuffer,StringBuilder的区别

StringBuffer 线程安全的长度可变字符容器,线程安全的效率低
StringBuilder 线程不安全的长度可变字符容器,线程不安全效率高

1.10 String和StringBuffer分别作为参数传递

形式参数问题

String作为参数传递 String虽然是引用类型,但是它是一个常量,所以在做传递的时候,完全可以将其看成基本数据类型数据进行传递,String类型输入值传递
StringBuffer作为参数传递

案例演示
String和StringBuffer分别作为参数传递问题

public class MyTest {public static void main(String[] args) {//引用类型,作为参数传递,形参的改变会影响实参。//基本类型作为参数传递,形参的改变,不影响实参。//字符串虽说是引用类型,但是他作为参数传递,属于值传递,跟基本数据类型一致。String str="abc";test(str);System.out.println(str);  //2."abc"StringBuilder sb = new StringBuilder("呵呵呵");test(sb);System.out.println(sb.toString()); //3.321呵呵呵}private static void test(StringBuilder sb) {sb.append("123");sb.reverse();}private static void test(String s) {s+="哈哈哈";System.out.println(s); //1."abc哈哈哈"}
}

补充:StringJoiner

StringJoiner(CharSequence delimiter)

构建了一个字符容器,指定分隔符

StringJoiner(CharSequence delimiter, CharSequence prefix, CharSequence suffix)

构建了一个字符容器,指定分隔符,前缀,后缀

StringJoiner add(CharSequence newElement)

增加了一份给 CharSequence值的 StringJoiner价值的下一个元素。

int length()

返回该 StringJoiner的 String表示长度。

String toString()

把容器中的数据以字符串返回

public class MyTest3 {public static void main(String[] args) {StringJoiner joiner = new StringJoiner(",");joiner.add("asdfasf").add("asdfasdfasdf").add("aaaaa");System.out.println(joiner.toString());StringJoiner joiner2 = new StringJoiner(",","(",")");joiner2.add("asdfasf").add("asdfasdfasdf").add("aaaaa");System.out.println(joiner2.toString());}
}

java中的StringBuffer类相关推荐

  1. java 中常用的类

    java 中常用的类 Math Math 类,包含用于执行基本数学运算的方法 常用API 取整 l  static double abs(double  a) 获取double 的绝对值 l  sta ...

  2. Java中常用的类及其特点

    Java中的内部类有四种(内部类作用1.封装装类型. 2.直接访问外部类成员. 3.回调.)内部类,方便他们的外部类调用,一般不会被其它类使用,比如事件监听器之类的,外部类刚好继承了一个别的类,如果你 ...

  3. Java中的StringBuilder类功能详解

    字符串是Java程序中最常用的一种数据结构之一.在Java中的String类已经重载的"+".也就是说,字符串可以直接使用"+"进行连接,如下面代码所示: St ...

  4. Java中常用的类,包,接口

    Java中常用的类,包,接口 包名 说明 java.lang 该包提供了Java编程的基础类,例如 Object.Math.String.StringBuffer.System.Thread等,不使用 ...

  5. JAVA基础(12.Java中的常用类String)

    目录 1.前言 2.日期(时间)相关类 2.1 日期类的应用场景 2.1.1Java中的日期相关的几个类 3. Java中的常用类学习方式 3.1 什么是常用类?为什么要学习? 3.2 怎么使用Jav ...

  6. java中的正则表达式类---表情转换实例

    Java中的正则表达式类 ________________________________________ public interface MatchResult 匹配操作的结果. 此接口包含用于确 ...

  7. 【翻译】Java中String, StringBuffer, StringBuilder的区别

    2019独角兽企业重金招聘Python工程师标准>>> String 是  Java 中最重要的类之一,并且任何刚开始做Java编程的人,都会 用String定义一些内容,然后通过著 ...

  8. Java中的BigDecimal类你真的了解吗?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:HikariCP www.jianshu.com/p/c81 ...

  9. java中的stack类和C++中的stack类的区别

    文章目录 1 java中的stack类和C++中的stack类的区别 1.1 java中的stack类 1.2 C++中的stack类 1.3 分析 不经意间想到了这个问题,存到栈中的是对象的引用,还 ...

  10. Java 中的 BigDecimal 类你了解多少?

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:什么?你还在使用fastjson,性能太差了个人原创+1博客:点击前往,查看更多 作者:HikariCP 链接: ...

最新文章

  1. 行走在泰国的7天8夜(曼谷篇-汤姆吉普森故居·四面佛·美食篇)
  2. LRU算法确定最后使用时间的顺序
  3. RTSP协议转换RTMP直播协议
  4. Spring Session源码解析
  5. 解决ubuntu连不上网络,输入ifconfig只显示本地环回问题
  6. React开发(153):ant design自定义列
  7. leetcode 1209 python
  8. ASP.NET Web API 跨域访问(CORS)要注意的地方
  9. 是时候了!网易首谈AI加持的AR
  10. idea导出配置和导入配置
  11. Linux系统的镜像文件下载
  12. windows环境下安装selenium
  13. 您的组织策略阻止我们为您完成此操作。有关详细信息,请联系技术支持。
  14. TF卡格式化8G格式化时候变成128KB的解决办法
  15. 服务器显示无vga电缆怎么回事,无vga电缆是什么意思
  16. 人事面试java需要注意点_程序员hr面试注意事项
  17. 2021强烈推荐的十大Win10必备工具(重装系统必备)
  18. 【python第一章 基础捋顺,第二章 python基础语法】
  19. IOS马甲包的那点事
  20. 如何用公式编辑器打除号?

热门文章

  1. spark sql 字符串转时间戳
  2. 网易裁员,让保安把身患绝症的我赶出公司。我在网易亲身经历的噩梦!
  3. 虚拟电厂 3D 可视化,节能减排绿色发展
  4. 分块矩阵乘法以及求逆应用
  5. 第六天 游戏策划学习
  6. js压缩图片到指定大小
  7. R语言中交集,并集,补集,差集的方法:向量和数据框
  8. OpenGL (太阳,地球,月亮 +太阳系八大行星)
  9. HTML+CSS 学习笔记
  10. 【趣读官方文档】1.管家的抉择 (Android进程生命周期)