由于字符串是常量,因此一旦被创建,其内容和长度是不可改变的。如果需要对一个字符串进行修改,则只能创建新的字符串。为了便于对字符串的修改,在JDK中提供了一个StringBuffer类(也称字符串缓冲区)。StringBuffer类和String类最大的区别在于它的内容和长度都是可以改变的。StringBuffer类,类似一个容器,当在其中添加或删除字符时,并不会产生新的StringBuffer对象。

StringNuffer类的特点

长度是可变化的。
可以字节操作多个数据类型。
最终会通过toString方法变成字符串。
StringBuffer类的常用方法

存储
StringBuffer append(char c) 将指定数据作为参数添加到已有数据结尾处
StringBuffer insert(int offset,String str) 将字符串中的offset位置插入字符串str
删除
StringBuffer delete(int start,int end) 删除StringBuffer对象中指定范围的字符或字符串序列(包含start,不包含end)。
Stringbuffer deleteCharAt(int index) 移除次序列指定位置的字符
获取
char charAt(int index) 获取指定位置的字符
int indexOf(String str) 获取指定字符串的位置
int lastIndexOf(String str) 获取指定字符串最后一次出现的位置
int length() 获取字符串的长度
String substring(int start, int end) 获取指定位置的字符串
修改
StringBuffer replace(int start,int end,String s) 在StringBuffer对象中替换指定的字符或字符串序列(包括star不包括end)
void setCharAt(int index,char ch) 修改指定位置index处的字符序列
反转
StringBuffer reverse() 将此字符串序列用其反转形式取代
注意:JDK1.5 版本之后出现了StringBuilder,StringBuffer是线程同步。,StringBuilder是线程不同步,以后开发,建议使用StringBuilder。

代码示例:

public class StringBufferDemo {
    public static void main(String [] args) {
        sop("添加");
        add();
        sop("删除");
        delete();
        sop("获取");
        select();
        sop("修改");
        alert();
    }
    public static void add() {
        StringBuffer sb = new StringBuffer();
        sb.append("dddddd");
        sop("在末尾处添加:"+sb);
        sb.insert(2,"12");
        sop("在第二个位置添加12:"+sb);
    }
    public static void delete() {
        StringBuffer sb = new StringBuffer("abcdefghigklmn");
        sb.delete(0,2);
        sop("删除0到2位置的"+sb);
        sb.deleteCharAt(3);
        sop("删除第3个位置的字符"+sb);
    }
    public static void select() {
        StringBuffer sb = new StringBuffer("abcdefghigak");
        sop("获取下标为2的字符"+sb.charAt(2));
        sop("获取字符e的下标"+sb.indexOf("e"));
        sop("获取a最后一次出现的下标"+sb.lastIndexOf("a"));
        sop("获取字符串的长度"+sb.length());
        sop("获取1到3位置的字符串"+sb.substring(1,3));
    }
    public static void alert() {
        StringBuffer sb = new StringBuffer("abcdefghigkl");
        sop("修改1到3位置上的字符串为zz:"+sb.replace(1, 3, "zz"));
        sb.setCharAt(5,'r');
        sop("修改5位置上的字符为r:"+sb);
        sop("反转"+sb.reverse());
    }
    public static void sop(Object obj) {
        System.out.println(obj);
    }
}
Last modification:August 7, 2020
If you think my article is useful to you, please feel free to appreciate