StringBuilder(高效字符串/缓冲字符串)--比普通字符串用起来更爽
字符串类与之前所学的String字符类有什么区别
1.普通的String长度不能随意更改
2.高效字符串的长度是可变的
构造方法
/*StringBuilder()
构造一个不带任何字符的字符串生成器,其初始容量为 16 个字符。*/
StringBuilder sb=new StringBuilder(); //没有任何内容---容器(用来存储字符串)
/*StringBuilder(String str)
构造一个字符串生成器,并初始化为指定的字符串内容。*/
StringBuilder sb=new StringBuilder("helloworld");
+=拼接字符串耗费内存原因:
每次拼接都会产生新的字符串对象,而利用StringBuilder来拼接字符串自始至终用的都是同一个StringBuilder容器
StringBuilder类的成员方法
获取方法
/*int length() 返回长度(字符数)。 */
/*int capacity() 返回当前容量。 */
package com.bianyiit.cast;
public class Demo_StringBuilder {
public static void main(String[] args) {
String s="helloworld";
StringBuilder sb = new StringBuilder(s);
System.out.println("内容的长度:"+sb.length());
System.out.println("容器的长度:"+sb.capacity());
//当内容的长度超过了容器的长度,容器会自动扩充,现在的容器长度=之前的容器长度*2+2(容器扩充规律)
String s1="helloworldhelloworld";
StringBuilder sb1 = new StringBuilder(s1);
System.out.println("内容的长度:"+sb1.length());
System.out.println("容器的长度:"+sb1.capacity());
}
}
//输出结果:
内容的长度:10
容器的长度:26
内容的长度:20
容器的长度:36
//当内容的长度超过了容器的长度,容器会自动扩充,现在的容器长度=之前的容器长度*2+2(容器扩充规律)
添加方法append()----链式编程
//append() ---往容器中添加内容,可以是任意类型,它的返回值仍然是一个StringBuilder对象
StringBuilder sb = new StringBuilder();
sb.append(1);
sb.append('妖');
sb.append("哈哈");
sb.append(true);
System.out.println(sb);
//链式编程技术
sb.append(1).append('妖').append("哈哈").append(true);
System.out.println(sb);
//问题:StringBuilder对象使用链式编程的添加数据的时候会产生几个对象??
永远都是它本身(只有一个)
反转方法reverse
String s="helloworld";
StringBuilder sb = new StringBuilder(s);
System.out.println(sb.reverse());
删除方法
/* StringBuilder delete(int start, int end)
移除此序列的子字符串中的字符。
StringBuilder deleteCharAt(int index)
移除此序列指定位置上的 char。*/
//包含start,不包含end 也就是[start,end)
StringBuilder sb = new StringBuilder();
sb.append(1);
sb.append('妖');
sb.append("哈哈");
sb.append(true);
System.out.println(sb);
System.out.println(sb.delete(0,2));
System.out.println(sb.deleteCharAt(4));
//输出结果:
1妖哈哈true
哈哈true
哈哈tre
拓展:
StringBuilder是一个长度可以改变的字符串,除了它还有StringBuffer
一般我们在开发中都会选择使用StringBuilder
两者有一个区别
StringBuilder是单线程的,线程不安全
StringBuffer 是多线程的,线程安全