我有以下代码
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: ?
。有谁知道为什么我得到这个例外?对我毫无意义。
答案 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,则制动。