StringBuilder(字符串的构造器)
StringBuilder:字符串的构造器,作用专门构建字符串的,可以构建一个长度可变的字符串
字符串拼接通过 + 号进行,但是如果进行大量字符串拼接,则会导致性能特别差
comparable (可比较的)底层构造方法中长度默认16
如下:
public static void main(String[] args) {
//获取当前系统时间的 时间戳(毫秒数 距离1970-01-01 0:0:0 )
String str = "";
long start = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {
str += i;
}
long end = System.currentTimeMillis();
System.out.println(end - start);
}
构造方法
StringBuilder()
构造一个没有字符的字符串生成器,并构造了16个字符的初始容量。
StringBuilder(CharSequence seq)
构建一个包含指定的 CharSequence相同字符的字符串生成器。
StringBuilder(int capacity)
构造一个字符串生成器没有字符和一个初始容量的 capacity参数指定。
StringBuilder(String str)
构造一个初始化为指定字符串的内容的字符串生成器。
StringBuilder的几种构建方式
//创建一个stringbuilder 对象
StringBuilder sb = new StringBuilder();//"";构建的是一个空字符串
//构建一个内容为 abc 的stringbuilder 对象
//如何将一个字符串转成 StringBuilder
sb = new StringBuilder("abc");
//创建一个stringbuilder 对象的基础上再进行构建使用
StringBuilder sb2 = new StringBuilder(sb);
System.out.println(sb.length());
System.out.println(sb2);
特点
- 可变字符串,高效拼接字符串
- 支持廉耻操作
- 线程不安全
方法
- substring()
截取字符串- append()
追加内容- insert()
在指定位置添加内容- replace(start, end, str)
将start - end位置的字符串替换为 str- delete(start, end)
删除 区间内的字符串- deleteCharAt(index)
删除指定索引对应的字符串- indexOf / lastIndexOf
获取某个字符串的索引位置- reverse()
反转字符串- substring(start , end)
截取字符串、返回String- isEmpty()
判断是否为空- length()
获取字符串长度- toString()
转字符串
append方法
- append(Object obj) ----可以追加任意数据类型
- 整个过程只构建一个对象 ,自动追加
StringBuilder sb = new StringBuilder();
sb.append("hello");
sb.append("world");
System.out.println(sb);
//结果:helloworld
indexOf方法
- indexOf(String str)
返回指数在这个字符串指定的子字符串中第一个出现的。- int indexOf(String str, int fromIndex)
返回此字符串的指定子字符串中第一个出现在索引中,从指定索引处开始。
StringBuilder sb = new StringBuilder();
sb.append("hello");
sb.append("world");
//查找字符串中 he 这个字符串出现的次数
int count = 0,index = -1 ;
while (true){
index = sb.indexOf("he",index + 1);
if (index == -1)break;
count ++;
}
System.out.println(count);
reverse() 方法
- 反转字符串(断除法的使用就是)
String tset = "abc";
System.out.println(new StringBuilder(tset).reverse().toString());
StringBuilder和StringBuffer区别
StringBuilder不安全的实例用于多个线程。如果需要同步然后建议StringBuffer可用。
StringBuffer 用法和 StringBuilder 用法一样
StringBuffer 是线程安全的,速度比较慢,会产生阻塞的问题
StringBuilder 是线程不安全的,在多线程环境下,使用的时候需要注意,速度比 StringBuffer 快(平常更多使用StringBuilder)