3

テキスト ファイルを開いてコメントをチェックするプログラムを作成しています。次に、コメントを解析して特定の単語をチェックします。

私が持っているエラーは、現在の行が空白または「/」以外の文字で始まるかどうかを確認する次の while ループにあります。そこにバックスラッシュ以外の文字がある場合、while ループは次の行に移動してチェックしますまた。while ループが要件を満たし、プログラムがクラッシュすると、次の出力エラーが発生します。

import java.rmi.Naming;
import java.net.InetAddress;
i
import java.lang.reflect.*;
i
ERROR: String index out of range: 0 
at java.lang.String.charAt(Unknown Source) 
at ExtraCredit.main(ExtraCredit.java:22)</code></pre> 

ここに問題のあるコードサンプルがあります

System.out.println(line);
char x = line.charAt(0);
while((line.charAt(0)!='/')&&(Character.isWhitespace(x)==false))
{
    line = inputFile.nextLine();
    x = line.charAt(0);
    System.out.println(line);
    System.out.println(x);
}

助けてくれてありがとう。単純なエラーだと確信していますが、表示されていません。

4

4 に答える 4

2

最初に文字列にコンテンツがあるかline==""どうかを確認lineしてから、呼び出しを試みcharAt()ます。

if(line!=null && line.length()>0) // perform this check to be safe.

String#charAt()のドキュメントを見てください。

スロー:

IndexOutOfBoundsException - インデックス引数が負であるか、この文字列の長さ以上である場合。

于 2013-07-17T04:18:01.607 に答える
0

null および正の長さをチェックします。

line = inputFile.nextLine();
if (line != null && line.length() > 0) {
    x = line.charAt(0);
    System.out.println(line);
    System.out.println(x);
}

このようなオブジェクトにアクセスする前に、このようなチェックが行われたこと、または保証が整っていることを常に確認する必要があります。

于 2013-07-17T04:20:17.397 に答える
0

次のように、行が(長さゼロの)空白の場合に(あなたのように)爆発しないコードを使用する必要がある場合:

while (!line.startsWith("\\"))

さらに良いことに、null もチェックします。

while (line != null && !line.startsWith("\\"))

空白のチェックは冗長であることに注意してください。スラッシュの場合、空白ではありません。

于 2013-07-17T04:20:37.120 に答える