while循环中的StringIndexOutOfBoundsException

时间:2012-08-04 12:57:02

标签: java while-loop

我有这段代码:

String input = JOptionPane.showInputDialog("Enter text");
StringBuilder forward = new StringBuilder("");
StringBuilder backward = new StringBuilder("");
int f = 0;
int b = input.length();


while(f < input.length()) {

    while(input.charAt(f) > 63) {

        forward.append(input.charAt(f));
        f++;

    }

    f++;
} 

System.out.println(forward);

虽然程序没有完成,但它已经抛出异常了。它说:

线程“main”中的异常java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:5(范围取决于,我输入的字符数)     在java.lang.String.charAt(未知来源)

奇怪的是,我昨天处理过类似的代码并且工作得很好,而且实用性也一样。

我已经搜索了堆栈论坛和文档oracle但我只发现当索引等于字符串的大小时(对于charAt方法)抛出此异常。

所以这似乎仍然是问题,但我找不到它。

while(input.charAt(f) > 63)

编辑:

为什么那段代码不起作用?它再次抛出与上述相同的异常?

while(b > 0) {

        if(input.charAt(b) > 63) {

            backward.append(input.charAt(b));

        }

        b--;
    }

1 个答案:

答案 0 :(得分:5)

f的值可以超过字符串的长度:

while (input.charAt(f) > 63) {
    forward.append(input.charAt(f));

    // This next line might increase f past the end of the string.
    f++;
}

请改为尝试:

while (f < input.length()) {

    char c = input.charAt(f);
    if (c > 63) {
        forward.append(c);
    }

    f++;
} 

在尝试访问f < input.length()之前,第二个版本始终会检查input.charAt(f)