while循环中stringbuilder的StringIndexOutOfBoundsException错误

时间:2013-10-24 16:22:00

标签: java

例如,赋值是从字符串“a”中删除char'I am Sam am I Sam',这是我到目前为止的一些代码:

public String removeLetters() {
    String cleaned=sentence;
    StringBuilder builder = new StringBuilder(cleaned);

    while(cleaned.indexOf(lookFor) != -1) {
        builder.deleteCharAt(cleaned.indexOf(lookFor));
    }
    return builder.toString();
}

当没有while循环时,此方法返回正常(尽管它只删除一个char),但是当我使用while循环运行它时,我得到OutOfBounds错误。

5 个答案:

答案 0 :(得分:1)

改变这个:

while(cleaned.indexOf(lookFor) != -1) {
    builder.deleteCharAt(cleaned.indexOf(lookFor));
}

用这个:

while(builder.indexOf(Character.toString(lookFor)) != -1) {
    builder.deleteCharAt(builder.indexOf(Character.toString(lookFor)));
}

答案 1 :(得分:1)

您可以使用String#replace方法直接执行此操作:

String cleaned = "I am Sam am I Sam";
cleaned = cleaned.replace("a", "");
System.out.println(cleaned);   // I m Sm m I Sm

答案 2 :(得分:0)

while循环中的条件是cleaned StringBuilder中的索引,但是您使用相同的索引来删除{中的字符} {1}} - 删除第一个字符后,它们不再匹配。

简而言之:

builder

答案 3 :(得分:0)

尝试这个。

cleaned.replaceAll(lookFor,"");

答案 4 :(得分:0)

必须从构建器中删除,而不是从源字符串中删除。此外,您最初有一个无限循环,尝试修改构建器字符串,但只检查源字符串,这不会更改。这编译并运行良好:

public String removeLetters()
{
    String lookFor = "a";
    String original="I am Sam am I Sam";
    StringBuilder builder = new StringBuilder(original);
    while(builder.indexOf(lookFor) != -1) {
        builder.deleteCharAt(builder.indexOf(lookFor));
    }
    return builder.toString();
}