String若想频繁的修改其内容时 性能不好
由此衍生出了 StringBuilder 与 StringBuffer
StringBuffer 是同步的 数据安全 效率低
StringBuilder 是不同步的 数据不安全 效率高
StringBuilder
1.java.lang包 无需导包
2.继承AbstractStringBuilder 间接继承Object 实现三个接口Serializable CharSequence Appendable
相比较于String实现的接口 StringBuilder与StringBuffer将Comparable接口替换成了Appendable接口
所以StringBuilder与StringBuffer没有compareTo方法
但是多了一个String没有的方法 append(); 方法
3.特性
可变字符串 private char[] value; 可以动态扩容
4.对象的构建
StringBuilder builder = new StringBuilder();
//无参数构造方法 构建默认长度为16空间的对象 char[]
StringBuilder builder1 = new StringBuilder(20);
//带int参数构造方法 构建自定义长度空间的对象 char[]
StringBuilder builder2 = new StringBuilder(“abc”);//此时数组长度为19
//带String参数构造方法 构建字符串长度+16个空间的对象 char[]
5.常用的方法
与String类不同的方法
append(); insert(); delete(); deleteCharAt(); reverse();
与String类相同的方法 名字相同 用法不一致
length(); charAt(); codePointAt(); indexOf(); lastIndexOf();
substring(); replace();
不常用的方法
ensureCapacity(); capacity(); setLength(); trimToSize(); setCharAt();
5.1 append();
//在字符串的后面插入元素 参数给什么都可以 int char boolean 等等
//最主要的方法 String中没有这个方法 不用接收也能生效
//频繁的拼接字符串时可以使用这个方法 能显著的提高效率
5.2 capacity();
//返回数组的容量
length();
//返回数组长度 即有效元素个数
如
StringBuilder builder = new StringBuilder(“abcdefg”);
System.out.println(builder.capacity());//即23
System.out.println(builder.length()); //即7
5.3 String = substring(int start[,int end]);
如
StringBuilder builder = new StringBuilder(“abcdefg”);
String value = builder.substring(2,5);//返回 cde
//返回值要用String类型的来接收 不接收看不到效果
5.4 delete(int start[,int end]);
//StringBuilder类中独有的方法
//将start到end之间的字符删掉 不用接收也能看到效果
如
StringBuilder builder = new StringBuilder(“abcdefg”);
builder.delete(3,5);//输出 abcfg
5.5 StringBuilder = deleteCharAt(int index);
//StringBuilder类中独有的方法
//将index位置的元素删除
如
StringBuilder builder = new StringBuilder(“abcdefg”);
builder.deleteCharAt(3);//输出 abcefg
5.6 StringBuilder= setCharAt(int index,char value);
//StringBuilder类中独有的方法
//将index位置的字符改成给定的value
如
StringBuilder builder = new StringBuilder(“abcde”);
builder.setCharAt(2,’a’);//输出 abade
5.7 ensureCapacity();
//确保数组容量够用
5.8 int = indexOf(String str[,int fromIndex]);
//找寻从指定位置往后str字符第一次出现的索引位置
int = lastIndexOf(String str[,int fromIndex]);
//找寻从指定位置向前找str字符第一次出现的索引位置
如
StringBuilder builder = new StringBuilder(“abcadefgab”);
int index = builder.indexOf(“a”,4);//输出 8
int index1 = builder.lastIndexOf(“a”,6);//输出 3
5.9 insert();
//往指定位置插入元素 插入什么都可以 String中没有这个方法
如
StringBuilder builder = new StringBuilder(“abcde”);
builder.insert(3,3);//输出 abc3de
builder.insert(3,”java”);//输出 abcjava3de
5.10 replace(int start,int end,String str);
//将 strat到end之间 的字符串替换成 指定的字符串
如
StringBuilder builder = new StringBuilder(“abcde”);
builder.replace(2,4,”java”);//输出 abjavae
5.11 reverse();
//将字符串反转
5.12 setLength();
//设置字符串有效元素的个数
//这个方法可能会不安全 通常不用
5.13 toString();
//重写了
//将 StringBuilder对象 转换成 String对象
5.14 trimToSize();
//将数组中无用的容量去掉 变成length长度的容量
如
StringBuilder builder = new StringBuilder(“abc”);//此时数组长度为19
System.out.println(builder.length());//有效 3
System.out.println(builder.capacity());//容量 19
builder.trimToSize();
System.out.println(builder.length());//有效 3
System.out.println(builder.capacity());//容量 3
builder.setLength(5);//有效元素被人为修改为 5
builder.trimToSize();
System.out.println(builder.length());//有效 5
System.out.println(builder.capacity());//容量 5