插入 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++;
}

您遇到的问题如下。

  1. 从头到尾遍历列表。
  2. 如果找到 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++;
}