- ベストアンサー
最終配列にNULLが含まれる場合の対応について
- 最終配列にNULLが含まれる場合の対応について質問があります。エラーが表示される状況と、原因がわからないためアドバイスをお願いします。
- 最終配列にNULLが含まれる場合の対応に関してエラーが発生しています。エラーメッセージ「java.lang.ArrayIndexOutOfBoundsException: 1」と表示され、問題がどこにあるのかわからない状況です。アドバイスをお願いします。
- 最終配列にNULLが含まれる場合の対処方法について質問があります。現在、BufferedReaderで1レコードずつ読み込んでいるソースでエラーが発生しており、原因がわかりません。アドバイスをお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>arrayline = line.split(","); を arrayline = line.split(",", 2); もしくは arrayline = line.split(",", -1); としたらどうでしょうか。 詳しくはAPIを読んでみてください。 http://docs.oracle.com/javase/jp/7/api/java/lang/String.html#split(java.lang.String, int)
その他の回答 (3)
- chie65536(@chie65535)
- ベストアンサー率44% (8801/19960)
以下のような入力ファイルで試してみると良い。3行目でカンマの無い行を拾ってエラーになる。 ---ここから--- 001-0010,北海道札幌市北区北十条西 001-0011,北海道札幌市北区北十一条西 001-0012北海道札幌市北区北十二条西 001-0013,北海道札幌市北区北十三条西 001-0014,北海道札幌市北区北十四条西 ---ここまで--- 以下のような入力ファイルでも同じ。3行目で空行を拾ってエラーになる。 ---ここから--- 001-0010,北海道札幌市北区北十条西 001-0011,北海道札幌市北区北十一条西 001-0013,北海道札幌市北区北十三条西 001-0014,北海道札幌市北区北十四条西 ---ここまで--- で、質問者さんは ---ここから--- 001-0010,北海道札幌市北区北十条西 001-0011,北海道札幌市北区北十一条西 001-0012,北海道札幌市北区北十二条西 001-0013,北海道札幌市北区北十三条西 001-0014,北海道札幌市北区北十四条西 ---ここまで--- というファイルでは上手く行って ---ここから--- 001-0010,北海道札幌市北区北十条西 001-0011,北海道札幌市北区北十一条西 001-0012,北海道札幌市北区北十二条西 001-0013,北海道札幌市北区北十三条西 001-0014,北海道札幌市北区北十四条西 ---ここまで--- というファイルでは失敗する、と悩んでいたのですよ。 見て判るよね?最後の行が「空行で、カンマが入ってない、文字列の長さが0の行だ」って事が。
- askaaska
- ベストアンサー率35% (1455/4149)
String A= arrayline[0] ; String B = arrayline[1] ; の前に 判定処理を入れればいいだけかと
お礼
ありがとうございます。 色々な処理方法を調べていたのですが なかなか解決せず投稿させていただきました。
- chie65536(@chie65535)
- ベストアンサー率44% (8801/19960)
テキストファイルの最後の行が「空行」の場合、 while((line = in.readLine()) != null) で、lineの内容は「null」ではなく「""」、つまり、長さ0の文字列になる。 その状態で arrayline = line.split(","); を行うと、lineの中に「,」が居ないので、arraylineは「要素数1の配列」になる。 その状態だと String A= arrayline[0] ; は成功するが String B = arrayline[1] ; は「要素番号が最大値を超える」ので「ArrayIndexOutOfBoundsException」のエラーになる。 当然だが、テキストファイルの途中に「,」が無い行が紛れ込んでいた時も、同じエラーが出る。 lineがnullの時にwhile文を終了するのは当然として、それ以外に「空行」や「カンマの居ない行」が現れたら、その行をスキップして次の行を処理するようにしないといけない。
お礼
ご説明どうもありがとうございます。 arrayline = line.split(",");で配列をカンマで 区切っていますので 症状はすぐに認識していたのですが ソースの書き方が分かりませんでした。
お礼
ご回答どうもありがとございます。 配列が多い場合もありますので arrayline = line.split(",", -1);で解決しました。 以前から、色々調べていたのですが なかなか解決しなかったので 投稿してよかったです。 APIの方はブックマークに登録させていただきました。 今回はどうもありがとうございました。