返回

深入剖析Java String类及其高级用法:StringBuffer与StringBuilder

后端

1. String类简介

String类是Java中表示字符串的类。字符串是一系列字符的集合,存储在内存中。String类提供了许多方法来创建、操作和格式化字符串。

String类是不可变的,这意味着一旦创建就不能更改。如果您需要更改字符串,则必须创建一个新的字符串。

2. StringBuffer类

StringBuffer类是一个可变的字符串缓冲区,它可以被多次修改。StringBuffer类提供了一些方法来创建、操作和格式化字符串,与String类类似。

StringBuffer类是线程安全的,这意味着它可以在多线程环境中使用。

3. StringBuilder类

StringBuilder类也是一个可变的字符串缓冲区,它与StringBuffer类非常相似。但是,StringBuilder类是线程不安全的,这意味着它不能在多线程环境中使用。

StringBuilder类的性能优于StringBuffer类,因为它在内部使用了一种更快的算法来修改字符串。

4. String、StringBuffer和StringBuilder的比较

特性 String StringBuffer StringBuilder
可变性 不可变 可变 可变
线程安全性
性能 中等

5. String类常用方法

方法
charAt(int index) 返回指定索引处的字符
compareTo(String anotherString) 将此字符串与另一个字符串比较
concat(String str) 将此字符串与另一个字符串连接
contains(String str) 检查此字符串是否包含另一个字符串
endsWith(String suffix) 检查此字符串是否以另一个字符串结尾
equals(String anotherString) 将此字符串与另一个字符串比较
indexOf(String str) 返回此字符串中另一个字符串的第一次出现位置
lastIndexOf(String str) 返回此字符串中另一个字符串的最后一次出现位置
length() 返回此字符串的长度
replace(String target, String replacement) 用另一个字符串替换此字符串中的所有匹配项
split(String regex) 使用正则表达式将此字符串拆分为字符串数组
startsWith(String prefix) 检查此字符串是否以另一个字符串开头
substring(int beginIndex) 返回此字符串从指定索引处开始的子字符串
substring(int beginIndex, int endIndex) 返回此字符串从指定索引处开始到另一个指定索引处结束的子字符串
toCharArray() 将此字符串转换为字符数组
toLowerCase() 将此字符串转换为小写
toUpperCase() 将此字符串转换为大写
trim() 删除此字符串开头和结尾的空格

6. StringBuffer和StringBuilder类常用方法

方法
append(String str) 在此字符串缓冲区的末尾追加另一个字符串
capacity() 返回此字符串缓冲区的容量
charAt(int index) 返回指定索引处的字符
delete(int start, int end) 从此字符串缓冲区中删除从指定索引处开始到另一个指定索引处结束的字符
deleteCharAt(int index) 从此字符串缓冲区中删除指定索引处的字符
insert(int index, String str) 在此字符串缓冲区的指定索引处插入另一个字符串
length() 返回此字符串缓冲区的长度
replace(int start, int end, String str) 用另一个字符串替换此字符串缓冲区中从指定索引处开始到另一个指定索引处结束的所有匹配项
reverse() 反转此字符串缓冲区中的字符顺序
setCharAt(int index, char ch) 将指定索引处的字符设置为指定字符
substring(int beginIndex) 返回此字符串缓冲区从指定索引处开始的子字符串
substring(int beginIndex, int endIndex) 返回此字符串缓冲区从指定索引处开始到另一个指定索引处结束的子字符串
toString() 将此字符串缓冲区转换为字符串

7. 实例

以下是一个使用String、StringBuffer和StringBuilder类的示例:

public class StringExample {

    public static void main(String[] args) {
        // 创建一个String对象
        String str = "Hello, world!";

        // 使用String类的方法
        System.out.println("String length: " + str.length()); // 输出字符串长度
        System.out.println("String contains \"world\": " + str.contains("world")); // 检查字符串是否包含另一个字符串
        System.out.println("String starts with \"Hello\": " + str.startsWith("Hello")); // 检查字符串是否以另一个字符串开头
        System.out.println("String ends with \"!\": " + str.endsWith("!")); // 检查字符串是否以另一个字符串结尾

        // 创建一个StringBuffer对象
        StringBuffer sb = new StringBuffer("Hello, world!");

        // 使用StringBuffer类的方法
        sb.append("!"); // 在字符串缓冲区的末尾追加另一个字符串
        sb.insert(7, "beautiful "); // 在字符串缓冲区的指定索引处插入另一个字符串
        sb.delete(7, 15); // 从字符串缓冲区中删除从指定索引处开始到另一个指定索引处结束的字符
        sb.replace(7, 15, "wonderful "); // 用另一个字符串替换字符串缓冲区中从指定索引处开始到另一个指定索引处结束的所有匹配项

        // 创建一个StringBuilder对象
        StringBuilder sb2 = new StringBuilder("Hello, world!");

        // 使用StringBuilder类的方法
        sb2.append("!"); // 在字符串缓冲区的末尾追加另一个字符串
        sb2.insert(7, "beautiful "); // 在字符串缓冲区的指定索引处插入另一个字符串
        sb2.delete(7, 15); // 从字符串缓冲区中删除从指定索引处开始到另一个指定索引处结束的字符
        sb2.replace(7, 15, "wonderful "); // 用另一个字符串替换字符串缓冲区中从指定索引处开始到另一个指定索引处结束的所有匹配项

        // 将字符串缓冲区转换为字符串
        String str2 = sb2.toString();

        // 输出结果
        System.out.println("StringBuffer: " + sb);
        System.out.println("StringBuilder: " + str2);
    }
}

输出结果如下:

String length: 13
String contains "world": true
String starts with "Hello": true
String ends with "!": true
StringBuffer: Hello, beautiful world!
StringBuilder: Hello, beautiful world!

8. 总结

String、StringBuffer和StringBuilder类都是Java中用于处理字符串的类。String类是不可变的,StringBuffer类是可变的且线程安全的,StringBuilder类是可变的且线程不安全的。StringBuffer和StringBuilder类提供了比String类更多的功能,如字符串拼接、插入、删除和替换等。在实际开发中,应根据具体需求选择合适的字符串类。