
下記のソースで
テキスト入出力を行う際でのご質問がございます。
最終配列がNULLの時と
文字がある場合のデータを入出力する際に
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at ExIO3.getValue(テスト.java:53)
at ExIO3.main(テスト.java:14)
というエラーが表示されます。
最終配列にすべて文字が存在する場合は問題ないのですが
こちらはBufferedReaderで
1レコードずつ読み込んでいるソースに問題があるのでしょうか?
アドバイスどうぞよろしくお願いします。
import java.io.*; //(1)入出力パッケージのインポート
import java.text.Normalizer;
class ExIO3 {
//mainメソッド
public static void main(String[] args) throws IOException {
ExIO3 object1 = new ExIO3();
//(1)抜出しメソッドgetValueと、
// ソートメソッドsortValueの呼出
object1.sortValue(object1.getValue());
}
//getValueメソッド
Reader getValue () throws IOException {
//(2)FileReaderオブジェクトcsvの生成
FileReader csv = new FileReader ("C:\\javasample\\テスト\\src\\テストin.txt");
//(3)BufferedReaderクラスでFileReaderクラスの
// オブジェクトcsvをラップ
BufferedReader in = new BufferedReader(csv);
//(4)PipedWriterオブジェクトpipeOutを生成
PipedWriter pipeOut = new PipedWriter();
//(5)PipedReaderオブジェクトpipeInを生成
PipedReader pipeIn = new PipedReader(pipeOut);
//(6)PrintWriterクラスでPipedWriterクラスの
// オブジェクトpipeOutをラップ
PrintWriter out = new PrintWriter("C:\\javasample\\テスト\\src\\テストout.txt");
//************************************************************************************************
//(7)入力テキストデータ
//************************************************************************************************
String line;
String[] arrayline;
Integer sequence_No =0 ; //行のカウンタ
//(8)読み込みソースがなくなるまでBufferedReaderで1行ずつ読み込み、
// 読み込みデータをprintlnメソッドで書き込み
while((line = in.readLine()) != null) {
sequence_No++; //連続番号生成
arrayline = line.split(",");
//======================================================
String A= arrayline[0] ;
String B = arrayline[1] ;
//======================================================
//************************************************************************************************
//(9)出力テキストデータ
//************************************************************************************************
顧客郵便番号_編集(A,out);
out.print(","); // ※
顧客住所_編集(B,out);
out.println(""); // ※
out.flush();
}
//(10)読み込みストリームのクローズ
in.close();
//(11)書き込みストリームのクローズ
out.close();
return pipeIn; //(12)pipeInオブジェクトのリターン
}
//************************************************************************************************
//顧客郵便番号_編集A1
//************************************************************************************************
private void 顧客郵便番号_編集(String a, PrintWriter out) {
// TODO 自動生成されたメソッド・スタブ
out.print(a.replaceAll(" ","").replaceAll(" ",""));
}
//************************************************************************************************
//顧客住所_編集B2
//************************************************************************************************
private void 顧客住所_編集(String b, PrintWriter out) {
// TODO 自動生成されたメソッド・スタブ
out.print(b);
}
//sortValueメソッド
void sortValue(Reader source) throws IOException {
}
}
No.4ベストアンサー
- 回答日時:
>arrayline = line.split(",");
を
arrayline = line.split(",", 2);
もしくは
arrayline = line.split(",", -1);
としたらどうでしょうか。
詳しくはAPIを読んでみてください。
http://docs.oracle.com/javase/jp/7/api/java/lang … int)
ご回答どうもありがとございます。
配列が多い場合もありますので
arrayline = line.split(",", -1);で解決しました。
以前から、色々調べていたのですが
なかなか解決しなかったので
投稿してよかったです。
APIの方はブックマークに登録させていただきました。
今回はどうもありがとうございました。
No.3
- 回答日時:
以下のような入力ファイルで試してみると良い。
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の行だ」って事が。
No.1
- 回答日時:
テキストファイルの最後の行が「空行」の場合、
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(",");で配列をカンマで
区切っていますので
症状はすぐに認識していたのですが
ソースの書き方が分かりませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java java 次の機能を有するメソッドを自クラスに作成し、実装したいです。 機能 名前判定機能 →名前が 3 2022/06/16 16:08
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBA 画像を貼り付ける...
-
VB.netでメソッドからコントロ...
-
親クラスの型で子のオブジェク...
-
prototypeについて
-
Vba ListViewの行挿入に関して...
-
.matchの使用方法
-
LiveConnectって?
-
InternetExplorer.Application...
-
Smartyでのエラー
-
html形式で保存
-
Listのiteratorインターフェー...
-
Excel Book の変更の検知
-
C#のクラスで値渡しをする
-
下記のようなjavaのプログラム...
-
Pyhonを見ていて、関数とメゾッ...
-
最終配列にNULLが含まれる...
-
VBA FSOの詳細説明はどこ?
-
Objective-Cのプログラム式につ...
-
mapの値を全件取得
-
DOMと同名のユーザ定義メソッド...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBA 画像を貼り付ける...
-
Excel VBA 定数にオブジェクト...
-
サーブレットコンテキストの意...
-
C#のクラスで値渡しをする
-
VB.netでメソッドからコントロ...
-
servletからjspへオブジェクト...
-
エクセルVBA/SpecialCellsで特...
-
Vba ListViewの行挿入に関して...
-
C#で親にイベントを投げる方法
-
MessageBox.Show(Me,…の「Me」...
-
String型からlong型への変換は...
-
VB.NETでのnothing の意義について
-
UTF-8のテキストファイルを開く...
-
javaで、、、
-
System.Collections.SortedList
-
C#でのExcel操作について.(Ran...
-
VBSのGetFolderメソッドについ...
-
JSPでのArrayListの表示につい...
-
ピクチャーボックスに点を打つ...
-
VBAでの[]
おすすめ情報