基本上,(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堆空间”错误
答案 0 :(得分:5)
你可以尝试:
String string = "(dog)(cat)(mouse)";
string = string.replace(")(", ") (");
这会将所有出现的“)(
”替换为“) (
”。
但是如果您想按照自己的方式进行操作,则修复将在插入之前使用i
递增i++;
,因为您在括号之前插入空格,而不是在括号之后插入空格。 / p>
答案 1 :(得分:2)
(dog)(ca
01234567
你调用
sb.insert(i, ' ');
i == 4
。 insert
获取当前偏移处的所有内容,将其右移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);
}