StringBuilder set方法 详解

在 Java 中,StringBuilder 提供了强大的 set 方法,主要用于修改 StringBuilder 内部的字符内容。以下是关于这些方法的详细说明、用法以及注意事项。


1. 常用的 set 方法

1.1 setCharAt(int index, char ch)

该方法用于修改 StringBuilder 指定索引处的字符。

方法签名

public void setCharAt(int index, char ch)

参数

  • index:要设置的字符索引(从 0 开始)。
  • ch:要设置的新字符。

用法

StringBuilder sb = new StringBuilder("Hello");
sb.setCharAt(1, 'a'); // 将索引 1 的字符 'e' 修改为 'a'
System.out.println(sb); // 输出 "Hallo"

注意事项

  • 索引必须在有效范围内(0 <= index < length),否则会抛出 IndexOutOfBoundsException
  • 仅修改指定位置的字符,不会影响其他部分。

1.2 setLength(int newLength)

该方法用于设置 StringBuilder 的长度,可以缩短或扩展现有内容。

方法签名

public void setLength(int newLength)

参数

  • newLength:要设置的新长度。

用法

  1. 缩短长度

    StringBuilder sb = new StringBuilder("Hello World");
    sb.setLength(5); // 截断为前 5 个字符
    System.out.println(sb); // 输出 "Hello"
    
  2. 扩展长度

    StringBuilder sb = new StringBuilder("Hello");
    sb.setLength(10); // 扩展到长度 10
    System.out.println(sb); // 输出 "Hello     "(补充空字符 '\u0000')
    

注意事项

  • 如果 newLength 小于当前长度,则会截断内容。
  • 如果 newLength 大于当前长度,会用 \u0000(空字符)填充扩展部分。
  • 索引越界或负值会抛出 IndexOutOfBoundsException

2. set 方法使用场景

2.1 动态更新特定字符

当需要修改字符串中某个字符(而非整个字符串)时,可以使用 setCharAt

示例

StringBuilder sb = new StringBuilder("ABCDE");
sb.setCharAt(2, 'X'); // 将索引 2 的字符 'C' 替换为 'X'
System.out.println(sb); // 输出 "ABXDE"
2.2 调整字符串长度

当需要手动控制字符串长度时,可以使用 setLength

示例

StringBuilder sb = new StringBuilder("HelloWorld");

// 缩短
sb.setLength(5);
System.out.println(sb); // 输出 "Hello"

// 扩展
sb.setLength(10);
System.out.println(sb); // 输出 "Hello     "(后面有 5 个空字符)

3. 常见问题和注意事项

3.1 关于索引范围
  • 对于 setCharAt 方法,如果索引超出范围(负值或大于等于字符串长度),会抛出:
    java.lang.StringIndexOutOfBoundsException
    

示例

StringBuilder sb = new StringBuilder("Hello");
sb.setCharAt(5, 'a'); // 抛出异常,因为索引 5 超出范围
3.2 空字符填充
  • 使用 setLength 方法扩展字符串长度时,新增的部分用空字符(\u0000)填充,这在控制台可能显示为空格。

示例

StringBuilder sb = new StringBuilder("Hello");
sb.setLength(7);
System.out.println(sb); // 输出 "Hello  ",但后两字符实际为 '\u0000'
System.out.println((int) sb.charAt(5)); // 输出 0,表示空字符
3.3 线程安全性
  • StringBuilder 是非线程安全的,因此在多线程环境中使用时需要同步处理。如果需要线程安全版本,可以使用 StringBuffer

4. 示例代码:全面使用 set 方法

public class StringBuilderSetExample {
    public static void main(String[] args) {
        // 初始化 StringBuilder
        StringBuilder sb = new StringBuilder("Hello World");

        // 使用 setCharAt 修改字符
        sb.setCharAt(6, 'J');
        System.out.println("After setCharAt: " + sb); // 输出: Hello Jorld

        // 使用 setLength 缩短长度
        sb.setLength(5);
        System.out.println("After setLength (shorten): " + sb); // 输出: Hello

        // 使用 setLength 扩展长度
        sb.setLength(10);
        System.out.println("After setLength (extend): " + sb); // 输出: Hello     (后面有 5 个空字符)

        // 访问扩展部分
        System.out.println("Char at index 7 (extended): " + (int) sb.charAt(7)); // 输出: 0
    }
}

5. 总结

方法功能适用场景
setCharAt修改指定索引位置的字符动态更新字符串中特定位置的字符
setLength调整字符串的长度,截短或扩展控制字符串长度,比如清理多余部分或预留额外空间
选择建议
  • setCharAt:当需要修改特定字符时,使用它更加高效。
  • setLength:用于动态调整字符串长度(如清理数据或为后续操作预留空间)。

通过正确使用 set 方法,可以更高效地操作和优化字符串内容,避免不必要的字符串对象创建,提升性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞滕人生TYF

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值