1. 两者的区别:
1) 两者功能上完全一样,两者包含的方法也一模一样,只不过Builder是线程不安全的,而Buffer是线程安全的;
2) 由于Builder适用于单线程,因此Builder效率要明显高于Buffer,因此一般单线程的应用首选Builder;
3) 它们俩和String的区别就是String不能修改内容,但它们俩可以;
!!以下就以StringBuilder为例介绍用法,都是StringBuilder的对象方法;
!!虽然StringBuilder/StringBuffer并不是直接建立在String的基础上的,但是大多数String拥有的方法StringBuilder也有(但并不是全部),因此用的时候可以尝试看看!
!!所有StringBuilder中修改字符串的方法不管反不返回新的字符串都将改变原字符串!!!
!!StringBuilder/StringBuffer都实现了toString,可以返回其内容的String类型形式;
2. 长度和容量:
1) int length(); // 返回当前长度(字符个数)
2) void setLength(int newLength); // 设置新的长度(小于原长就截断,大于原长则保留原串超出部分用Java的空字符填充)
3) int capacity(); // 返回容量(能装字符个数的上限)
3. 设置序列中的字符:
1) 为某个字符重新赋值:void setCharAt(int index, char ch); // 相当于s[index] = ch;
2) 删除指定位置的字符:StringBuilder deleteCharAt(int index);
4. 逆序:StringBuilder reverse();
5. 追加:
1) StringBuilder append(type val);
2) 追加的类型包括所有Java的基础类型(boolean、int、float等),肯定是先转换成字符串的形式再追加的;
3) 也可以是引用类型(当然包括String自己啦!),里面有一个版本append(Object obj);,只要该类型实现了toString方法就会将toString的结果追加到字符串末尾;
4) 还提供了专门追加字符序列的版本:
i. StringBuilder append(char[] str);
ii. StringBuilder append(char[] str, int offset, int len);
6. 插入:
1) StringBuilder insert(int offset, type val); // 在指定索引出插入val的字符串形式
2) type和上面一样支持所有Java基础类型以及Object(默认调用toString方法)、String;
3) 插入字符数组的版本:
i. StringBuilder insert(int offset, char[] str);
ii. StringBuilder insert(int index, char[] str, int offset, int len); // 从index的位置开始插入,只不过不能同时用两个offset命名罢了,这里的index和上面的offset是一个意思
7. 删除指定区间:StringBuilder delete(int start, int end); // 删除[start, end),记住!是左闭右开的!!
8. 替换:StringBuilder replace(int start, int end, String str); // 将[start, end)替换成str