在字符串中的特定字符后添加 space

Adding a space after a specific character in a string

基本上,(dog)(cat)(mouse) 需要 (dog) (cat) (mouse)

我尝试的代码:

StringBuilder sb = new StringBuilder("(dog)(cat)(mouse)");

for (int i = 0; i < sb.length(); i ++)
{
   if (sb.charAt(i) == ')')
   {
      sb.insert(i, ' ');
   }
}

String result = sb.toString();

但我遇到了某种 "Java heap space" 错误

你可以试试:

String string = "(dog)(cat)(mouse)";
string = string.replace(")(", ") (");

这会将所有出现的“)(”替换为“) (”。

但是如果您想按照自己的方式进行,解决方法是在插入之前使用 i++; 增加 i,因为您要在括号前插入 space , 不是之后。

(dog)(ca
01234567

你调用

  sb.insert(i, ' ');

i == 4insert 获取当前偏移量处的所有内容,将其右移 1 并插入给定的字符。所以

(dog )(ca
012345678

然后你再循环一次,现在i++变成了5,这里还有之前的),所以你做同样的事情,在它前面加一个space。

(dog  )(ca
0123456789

您一直重复此操作,直到 运行 超出堆 space。

)之后添加space。

 sb.insert(i + 1, ' ');

所以,基本上,当循环遇到第一个 ) 字符时,它会在 i 的确切位置插入一个 space(当前 ) ), 这有效地在 ) 字符之前添加了 space。

在下一个循环中,它将遇到相同的 ) 字符,并且重复该过程,直到 运行 内存不足...

相反,您想使用 i + 1) 字符之后插入 space,例如...

    StringBuilder sb = new StringBuilder("(dog)(cat)(mouse)");

    for (int i = 0; i < sb.length(); i++) {
        if (sb.charAt(i) == ')') {
            sb.insert(i + 1, ' ');
        }
    }

    String result = sb.toString().trim();
    System.out.println(result);

输出

(dog) (cat) (mouse)

我在括号 (i+1) 后添加了 space。堆错误的原因是您增加了执行插入时 sb 超时的长度。

public static void main(String[] args) {
    StringBuilder sb = new StringBuilder("(dog)(cat)(mouse)");
    int length =  sb.length();

    for (int i = 0; i < length; i ++)
    {
       if (sb.charAt(i) == ')')
       {
         sb.insert(i+1, " ");
       }
    }

    String result = sb.toString();
    System.out.println(result);
}