0

我有以下代码

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)来测试字符串中是否有任何东西并且有。我尝试j使用更高的值进行初始化,仍然得到相同的东西,只是不同的String index out of range: ?. 有谁知道我为什么会得到这个例外?对我来说毫无意义。

4

3 回答 3

4

尝试更多类似的东西:

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

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

编辑:鉴于您实际上正在尝试做的事情的重新澄清,只需删除变量j,因为它混淆了可读性(因此我感到困惑)。

while(whiteSpace<line.length && Character.isWhitespace(line.charAt(whiteSpace)))
    { whiteSpace++; }
于 2013-10-21T15:30:52.793 回答
1

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

while (j < line.length() && Character.isWhitespace(line.charAt(j))) {
    whiteSpace++;
    j++;
}
于 2013-10-21T15:32:05.307 回答
0

也许是因为您正在递增 j++,然后在以下位置使用它:

Character.isWhitespace(line.charAt(j))

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

因此,您可能必须检查 char 是否不为空,然后检查它是否为空格。或者如果下一个字符为空则刹车。

于 2013-10-21T15:33:49.503 回答