在字符串中的特定字符后添加空格

时间:2015-02-23 23:43:58

标签: java string char stringbuilder

基本上,(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堆空间”错误

4 个答案:

答案 0 :(得分:5)

你可以尝试:

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

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

但是如果您想按照自己的方式进行操作,则修复将在插入之前使用i递增i++;,因为您在括号之前插入空格,而不是在括号之后插入空格。 / p>

答案 1 :(得分:2)

(dog)(ca
01234567

你调用

  sb.insert(i, ' ');

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

(dog )(ca
012345678

然后你再次循环,现在i++变为5,其中有前一个),所以你做同样的事情并在它之前添加一个空格。

(dog  )(ca
0123456789

在堆空间不足之前,请不断重复此操作。

)

之后添加空格
 sb.insert(i + 1, ' ');

答案 2 :(得分:1)

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

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

相反,您希望使用i + 1)字符之后插入空格,例如......

    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)

答案 3 :(得分:0)

我在括号(i + 1)后添加了空格。堆错误的原因是你增加了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);
}