• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ファイルの読み込み、配列に格納)

Java初心者のためのファイル読み込みと配列格納方法

このQ&Aのポイント
  • Java初心者のために、ファイルの読み込みと配列への格納方法を解説します。
  • 質問者は、2つのファイルを同時に読み込み、それぞれ異なる配列に格納したいとのことですが、どのように記述すればよいのか分からないとのことです。
  • また、テキストファイルからの読み込み時にはアルファベットを大文字にし、記号(スペース含)は除外して配列に格納する方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

まずコンパイルエラーの対処方法ですが >System.out.println(no file); ここはno fileという文字列を標準出力したいのでしょうか? そうであれば、no fileを"no file"の様に""で囲んであげてください。 >String[] da = s.split("\\s+"); ←ここのsでエラー。変数sが見つけられないと出ます・・・ >s2 = s2.toUpperCase(); ←ここのs2でエラー。sと同じエラーです >String[] ta = s2.split("[^A-Z]+"); ←ここのs2でエラー 変数sとs2がスコープ切れしています。 ローカル変数のスコープは宣言したブロックの内側で、宣言した行以降で有効です。 ですので、try{~}の中の処理に続けて記述してやれば良いと思います。 ですが、それでコンパイルが通っても、以下の記述に問題があるので、恐らく実行時例外がおきます。 >while((s=b.readLine())!=null){ >} >while((s2=b2.readLine())!=null){ >} このやり方ではwhileブロック終了後のsとs2は常にnullになります。 よって、後のsplitメソッドを呼ぶ段でNullPointerExceptionがスローされるはずです。 ファイルの内容を一行取得するだけであれば、whileを使う必要は無いです。 改行文字を含んでいる場合を考慮する必要があるならば、それならそれで、もう少し工夫が必要です。 以上です。

lockwell
質問者

お礼

ご指摘の通り直したらできました!ありがとうございました! 実はもう一つ、ファイルの書き込みでつまづいています。 もしよろしければご教授ください。 本当にありがとうございました!

その他の回答 (1)

回答No.1

>読み込むプログラムは以上のように書いたのですが、2つファイルを読み込むにはどのように記述したらよいのでしょうか。 >FileReaderを2つ作成?しても最初に指定したデータファイルの内容がまた読み込まれるだけで・・・ ソースの中で FileReader f = new FileReader(args[0]); としている箇所がありますが、 String[] argsの中にはコマンドライン引数として渡された文字列が空白文字区切りで区切られて格納されます。 >ファイルの指定は実行時に、java sample datafile.dat textfile.txt と指定します。 この場合ですと、 args[0] =>datafile.dat args[1] =>textfile.txt という風に格納されているという事ですね。 ファイルの読み込みに関してはその辺りを考慮して少し修正を加えれば問題無いと思います。 読み込んだ文字列を配列に格納する方法に関してですが、 簡単な実装方法としては文字列をStringクラスのsplitメソッドで分割してやるという方法があります。 <例> //datafile.dat String df = "AC 4C 7C 10C KC 3D 6D 9D QD JB 3C 6C 9C QC 2D 5D 8D JD JA 2C 5C 8C JC AD 4D 7D 10D KD"; //1文字以上連続する空白文字を区切り文字とみなして正規表現で分割して配列に格納 String[] da = df.split("\\s+"); //textfile.txt String tf = "Dr. Fujita is great!"; //大文字に変換 tf = tf.toUpperCase(); //1文字以上連続するアルファベット以外の文字を区切り文字とみなして正規表現で分割して配列に格納 String[] ta = tf.split("[^a-zA-Z]+"); 以上です。

lockwell
質問者

補足

ありがとうございます。ファイルの読み込みとsplitメソッド非常に参考になりました! しかしファイルを読み込んでも配列に格納のところでエラーが出てしまいます。 String s; while((s=b.readLine())!=null) この記述だと、sに"AC 4C 7C 10C KC 3D 6D 9D QD JB 3C 6C 9C QC 2D 5D 8D JD JA 2C 5C 8C JC AD 4D 7D 10D KD"が代入されたことになるのですよね? つまりmiyajima24さんの例で言えばsがString df と同じですよね。 なので、splitでわけるために、String[] da = s.split("\\s+");と記述したのですが、 s.splitのsの部分でエラーがでます。sはStringで定義しているのでmiyajima24さんのString df と同じはずなのですが・・・ import java.io.*; public class sample{ public static void main(String[] args){ try{ FileReader f = new FileReader(args[0]); FileReader f2 = new FileReader(args[1]); BufferedReader b = new BufferedReader(f); BufferedReader b2 = new BufferedReader(f2); String s, s2; //data fileの読み込み while((s=b.readLine())!=null){ } //text fileの読み込み while((s2=b2.readLine())!=null){ } }catch(Exception e){ System.out.println(no file); } String[] da = s.split("\\s+"); ←ここのsでエラー。変数sが見つけられないと出ます・・・ s2 = s2.toUpperCase(); ←ここのs2でエラー。sと同じエラーです String[] ta = s2.split("[^A-Z]+"); ←ここのs2でエラー } } なぜこのsでエラーが出るのでしょうか?

関連するQ&A