StringBuilder常用的API
每个字符串缓冲区都有容量。 只要字符串缓冲区中包含的字符序列的长度不超过容量,就不必分配新的内部缓冲区数组。 如果内部缓冲区溢出,它会自动变大。
除非另有说明,否则将null参数传递给null中的构造函数或方法将导致抛出NullPointerException
从JDK 5版本开始,这个类已经补充了一个设计用于单个线程的等效类, StringBuilder 。 通常应优先使用StringBuilder类,因为它支持所有相同的操作,但速度更快,因为它不执行同步。
一、StringBuilder和String的转换
1.String转StringBuilder
示例代码:
String str1 = new String("goodbye java");
StringBuilder str2 = new StringBuilder(str1);
2.StringBuilder转String
示例代码:
StringBuilder str1 = new StringBuilder("goodbye java");
String str2 = str1.toString();
二、StringBuilder常用的一些方法
1.字符串拼接 append()
示例代码:
StringBuilder sb = new StringBuilder("hello ");
//调用append()
sb.append("world");
System.out.println(sb);
//输出结果:hello world
2.插入数据 insert(int i,String str)
示例代码:
StringBuilder sb = new StringBuilder("01232456789");
//调用insert()
sb.insert(6,"QWERDF");
System.out.plintln(sb);
//输出结果:01345QWERDF6789
3.查找字符串 indexOf(String str)
示例代码:
StringBuilder s = new StringBuilder("0123456789");
//找123,返回索引(输出第一个匹配的索引)
int i1 = s.indexOf("123");
//找123,返回索引(若找不到则输出-1)
int i2 = s.indexOf("666");
System.out.println(t1);
System.out.println(t2);
//输出结果:
//1
//-1
4.替换字符串 replace(int a,int b,String str)
示例代码:
StringBuilder sb = new StringBuilder("666666");
sb.replace(1, 2, "xx");
System.out.println(sb);
//输出结果:6xx666
5.字符串的反转reverse
示例代码:
StringBuilder sb = new StringBuilder("0123456");
sb.reverse();
System.out.println(sb);
//输出结果:6543210
6.获取字符 charAt(int i)
示例代码:
StringBuilder sb = new StringBuilder("0123456789");
System.out.println(sb.charAt(6));
//输出结果:6
7.获取字符串 substring
示例代码:
StringBuilder sb = new StringBuilder("0123456789");
System.out.println(sb.substring(6));
System.out.println(sb.substring(6,8));
//输出结果:
//6789
//678
8.删除指定位置 delete(int a,int b)
示例代码:
StringBuilder sb = new StringBuilder("0123456789");
//从0位置开始,到6结束(左闭右开,不包括6)
sb.delete(0,6);
System.out.println(s);
//输出结果:6789
StringBuffer上的主要操作是append和insert方法,它们被重载以接受任何类型的数据。 每个都有效地将给定的数据转换为字符串,然后将该字符串的字符追加或插入字符串缓冲区。 append方法总是在缓冲区的末尾添加这些字符; insert`方法在指定点添加字符。
每当涉及源序列的操作发生时(例如从源序列追加或插入),此类仅在执行操作的字符串缓冲区上同步,而不在源上同步。 请注意,虽然StringBuffer设计为可以安全地从多个线程同时使用,但如果构造函数或append或insert操作传递了跨线程共享的源序列,则调用代码必须确保操作具有一致且不变的视图操作持续时间的源序列。 这可以通过在操作调用期间持有锁的调用者,通过使用不可变的源序列,或者不跨线程共享源序列来满足。