【问题标题】:Can't figure out why I'm getting a StringIndexOutOfBoundsException无法弄清楚为什么我会收到 StringIndexOutOfBoundsException
【发布时间】:2013-10-21 15:28:06
【问题描述】:

我有以下代码

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: ?。有谁知道我为什么会得到这个例外?对我来说毫无意义。

【问题讨论】:

    标签: java string charat


    【解决方案1】:

    试试这样的:

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

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

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

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

    【讨论】:

    • @peeskillet 如果提供的答案解决了您的问题,请检查accept answer 按钮,它会关闭您的问题。 ;)
    • 是的,我还要再等一分钟
    • 对不起,我不得不取消接受才能完全解决我的问题的答案,这只是在行首找出空格。你的回答有点改变了我想要的格式
    • @peeskillet 那么你可能根本不需要变量j。如果没有它,你的代码会更好,因为它会混淆可读性。
    • 如果没有j,我将如何获得空白?
    【解决方案2】:

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

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

    【讨论】:

    • 您的答案实际上是完全解决了我的问题的答案。我只是想在一行的开头找到空格。 prevoius 接受的答案使我的格式全部变了。谢谢!
    【解决方案3】:

    可能是因为您正在递增 j++,然后在 :

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-04
      • 2017-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-28
      相关资源
      最近更新 更多