[疯狂Java]基础类库:StringBuilder/StringBuffer

来源:互联网 发布:淘宝如何缩短收货时间 编辑:程序博客网 时间:2024/05/17 06:26

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

0 0