- ベストアンサー
StringTokenizerクラスでのエラーについて
仕事で一人で組んでいるので、尋ねる相手がいません。 どなたか教えて下さいm(__)m かなり長い文字列を読込んで、その文字列を"!"を条件に分割したいので、以下のようなソースを書きました。 実行すると、NullPointerExceptionが発生します。 public class Split2 { public static void main(String args[]) throws IOException { //サンプルファイルの読込み BufferedReader red = new BufferedReader(new FileReader("getRoute_ResultSample_1.txt")); String line; while ((line = red.readLine()) != null) { System.out.println(line); } red.close(); StringTokenizer strToken = new StringTokenizer(line, "!"); int cnt = strToken.countTokens(); 文字列分割処理の一番最初の処理として"1"で区切り、その数をまず取得したいのです。 私は結構初心者PGです。 よろしくお願い致しますm(__)m
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
while ((line = red.readLine()) != null) { System.out.println(line); } を抜けるときにlineは必ずnullなので、 StringTokenizer strToken = new StringTokenizer(line, "!"); が例外をはいているのではないでしょうか。 プログラムの意図が良く分かりませんが、 ファイルの最終行のみを処理したいのですか?
その他の回答 (2)
- yuchi-co
- ベストアンサー率60% (29/48)
はい、やってみました。 lineがnull、最終行がnullなので、StringTokenizer strToken = new StringTokenizer(line, "!");で落ちました・・・。 (私も初心者です)
- yuchi-co
- ベストアンサー率60% (29/48)
NullPointerExceptionが発生しているのは何行目でしょう? ソースを見るとStringTokenizerの部分ではNullPointerExceptionが発生していると思えません。 あるとしたら、ファイル読み込みのどこかじゃないでしょうか。 StringTokenizer strToken = new StringTokenizer(line, "!"); で表示はされてますか? されていないのであればそれ以前にNullPointerExceptionが発生しているはずです。 それと、メインメソッドにthrows IOException( スロー宣言)をつけるのはおかしいですね。 BufferedReader red = new BufferedReader(new FileReader("getRoute_ResultSample_1.txt")); 以下の部分をtry~catchするのが自然だと思います。 それに、このコードだと、ファイルの中身をいっきに分割するようにはなってません。 while ((line = red.readLine()) != null) { System.out.println(line); } で1行ずつ読み込んで、表示をしているだけなので StringTokenizer strToken = new StringTokenizer(line, "!"); の部分で分割しようとしてるlineの中身は最後の1行だけです。 長々と書きましたが、結局解決になってないようですみません・・・。
お礼
wotar-cooledさん、yuchi-coさん 早速の回答、ありがとうございます。 お二人の指摘で、自分がいかに愚かな事をしていたか気がつきました。 穴があったら入りたいくらい恥ずかしいです(>_<) でもお二人のアドバイスがなかったら、 気がつくのにもっと時間がかかったとは思います。 本当に感謝してます。 ちなみに、文字列は、1行でものすごーーーーく長いのです。 それを数種類のデリミタで区切って、 最後は配列に入れてXMLで出力するのです。 その第1歩で、コケたのでした^^; もう少し、この独り作業は続くので、 またお世話をかけるかと思います。 そんな時は、よろしくお願い致しますm(__)m