插入 for 循环失败
insert in for loop fails
我正在尝试将 for 循环插入到 Stringbuilder 中,但它崩溃了。这是我的代码
StringBuilder sb = new StringBuilder("This is a text");
for(int i = 0;i < sb.length();i++){
if(sb.charAt(i) == 't'){
sb.insert(i, 't');
}
}
这样做的目的是每 't'.
加倍
您得到了一个 OutOfMemoryError
,因为您没有跳过要加倍的 t
个字符。
This is a text
^
This is a ttext
^
This is a tttext
^
这一直持续到您 运行 内存不足。
您必须在插入加倍的 t
.
后通过增加 i
来跳过刚刚添加的 t
if (sb.charAt(i) == 't')
{
sb.insert(i, 't');
i++;
}
您遇到的问题如下。
- 从头到尾遍历列表。
- 如果找到
t
添加 t
。
两种情况,要么String
中至少有1个t
,要么有none。如果有 none 那么一切都会起作用,代码什么都不做。但是,如果有 t
,它会发现 t
添加另一个 t
,下一个要检查的字符现在将是... t
!。无限循环。
您可以通过递增 i
(ì++
) 或使用 continue
.
来解决该问题
我建议使用 StringBuilder 和这样的字符串:
String currentText = "This is a text";
StringBuilder sb = new StringBuilder();
for(int i = 0; i < currentText.length(); i++){
sb.append(currentText.charAt(i));
if(currentText.charAt(i) == 't'){
sb.append('t');
}
}
使用该解决方案,您将不会遇到永无止境的循环问题。
因为当你找到一个t
这个指令时sb.insert(i, 't')
在位置i
添加t
并且之前的t
在位置i+1
,所以当 i
将在 for
循环的末尾递增时 i++
你再处理一次相同的字母 t
。这样会导致无限循环。
要解决这个问题,您应该在 if
块中用 i++
增加 i
,就像这样:
if(sb.charAt(i) == 't'){
sb.insert(i, 't');
i++;
}
我正在尝试将 for 循环插入到 Stringbuilder 中,但它崩溃了。这是我的代码
StringBuilder sb = new StringBuilder("This is a text");
for(int i = 0;i < sb.length();i++){
if(sb.charAt(i) == 't'){
sb.insert(i, 't');
}
}
这样做的目的是每 't'.
加倍您得到了一个 OutOfMemoryError
,因为您没有跳过要加倍的 t
个字符。
This is a text
^
This is a ttext
^
This is a tttext
^
这一直持续到您 运行 内存不足。
您必须在插入加倍的 t
.
i
来跳过刚刚添加的 t
if (sb.charAt(i) == 't')
{
sb.insert(i, 't');
i++;
}
您遇到的问题如下。
- 从头到尾遍历列表。
- 如果找到
t
添加t
。
两种情况,要么String
中至少有1个t
,要么有none。如果有 none 那么一切都会起作用,代码什么都不做。但是,如果有 t
,它会发现 t
添加另一个 t
,下一个要检查的字符现在将是... t
!。无限循环。
您可以通过递增 i
(ì++
) 或使用 continue
.
我建议使用 StringBuilder 和这样的字符串:
String currentText = "This is a text";
StringBuilder sb = new StringBuilder();
for(int i = 0; i < currentText.length(); i++){
sb.append(currentText.charAt(i));
if(currentText.charAt(i) == 't'){
sb.append('t');
}
}
使用该解决方案,您将不会遇到永无止境的循环问题。
因为当你找到一个t
这个指令时sb.insert(i, 't')
在位置i
添加t
并且之前的t
在位置i+1
,所以当 i
将在 for
循环的末尾递增时 i++
你再处理一次相同的字母 t
。这样会导致无限循环。
要解决这个问题,您应该在 if
块中用 i++
增加 i
,就像这样:
if(sb.charAt(i) == 't'){
sb.insert(i, 't');
i++;
}