无法弄清楚为什么我得到一个StringIndexOutOfBoundsException

时间:2013-10-21 15:28:07

标签: java string charat

我有以下代码

while (input.hasNextLine()) {
    String line = input.nextLine();
    System.out.println(line);  // added to test if anything in String, and there is
    int whiteSpace = 0;
    int j = 0;

    while (Character.isWhitespace(line.charAt(j))) {
        whiteSpace++;
        j++;
    }
}

当我运行它时,我得到StringIndexOutOfBoundsException: String index out of range: 0,这对我没有意义。我添加了一个System.out.print(line)来测试String中是否有任何内容。我尝试使用更高的值初始化j,仍然使用相同的内容,只是另一个String index out of range: ?。有谁知道为什么我得到这个例外?对我毫无意义。

3 个答案:

答案 0 :(得分:4)

尝试更像这样的事情:

while(j<line.length) {
    if(Character.isWhitespace(line.charAt(j))) {
        whiteSpace++;
    }
    j++;
}

它可能更接近你想要做的事情。你现在拥有的东西,如果它有效,只有j时才会增加whiteSpace,因此,即使你没有得到错误,你也会陷入无限循环除非你有String只包含空格。上面的代码将在每个字符上增加j(因此您只需检查每个字符一次,只检查整个字符串一次),但仅当whiteSpace返回Character.isWhitespace(line.charAt(j))时才会增加true

编辑:鉴于重新澄清你实际上要做的事情,只需删除变量j,因为它使可读性变得混乱(因此我的困惑)。

while(whiteSpace<line.length && Character.isWhitespace(line.charAt(whiteSpace)))
    { whiteSpace++; }

答案 1 :(得分:1)

我不知道你的内容是什么,但你应该尝试:

while (j < line.length() && Character.isWhitespace(line.charAt(j))) {
    whiteSpace++;
    j++;
}

答案 2 :(得分:0)

也许是因为你正在增加j ++然后在:

中使用它
Character.isWhitespace(line.charAt(j))

如果你只有一个字符串,这是一个空格,那么在下一次迭代中,它会尝试到达下一个不存在的字符。

因此,您可能必须检查char是否为null,然后检查它是否为空格。 如果下一个char为null,则制动。