You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java如何在字符串特定字符前后加空白 多个{场景处理异常问题

问题根因

你当前的代码存在两个索引同步错误:

  • 你在循环中读取的是原始字符串str的字符索引,但插入操作是在动态变长的StringBuilder上执行,每插入两个空格,StringBuilder中后续字符的索引就会比原字符串大2,导致后续{的插入位置全部错位。
  • 正向遍历时插入字符会打乱后续遍历的位置对应关系,匹配到第一个{后的所有插入位置都会偏移。

解决方案

方案1:反向遍历插入(逻辑改动最小)

从字符串末尾往前遍历匹配{,插入操作只会影响更靠后的索引,不会干扰还未遍历的前半部分索引,不需要额外处理偏移量:

public class Test {
    public static void main(String[] args) {
        String str = "t{estin{g";
        StringBuilder sb = new StringBuilder(str);
        // 从后往前遍历原字符串
        for (int i = str.length() - 1; i >= 0; i--) {
            if (str.charAt(i) == '{') {
                sb.insert(i + 1, " ");
                sb.insert(i, " ");
            }
        }
        System.out.println(sb.toString());
    }
}

运行后输出结果和预期完全一致:t { estin { g

方案2:正则替换(代码最简洁)

直接用Java字符串的正则替换方法,把所有{替换为前后带空格的格式即可,不需要手动遍历拼接:

public class Test {
    public static void main(String[] args) {
        String str = "t{estin{g";
        String result = str.replaceAll("\\{", " { ");
        System.out.println(result);
    }
}

内容的提问来源于stack exchange,提问作者red1231

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 12:18:03