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
相关产品推荐
相关产品推荐

