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があった場合にのみ増加するため、エラーが発生していなくても、空白のみで構成される をwhiteSpace持っていない限り、無限ループに陥ります。 String. 上記のコードはjすべての文字でインクリメントします (つまり、文字列全体で各文字を 1 回だけチェックしwhiteSpaceますCharacter.isWhitespace(line.charAt(j))) true

編集:実際にやろうとしていることを再明確化するとj、読みやすさが損なわれるため、変数を削除するだけです(したがって、私の混乱)。

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