在字符串中的特定字符后添加 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 == 4
。 insert
获取当前偏移量处的所有内容,将其右移 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);
}
基本上,(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 == 4
。 insert
获取当前偏移量处的所有内容,将其右移 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);
}