回答編集履歴

2 削除 extnds Sample.

katoy

katoy score 21319

2015/09/13 19:35  投稿

ファイルを一行ずつ読みます。
3 つの List<Integer> を用意します。
1行を3つの整数として解釈します。(解釈に失敗したら、例外を投げます)
それぞれの整数を List<Integer> の保存します。
全ての行を処理したら、List<Integer> を Integer[] に変換します。
```java
// See https://teratail.com/questions/16077
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
public class ReadInt extends Sample {
public class ReadInt {
   public static void main(String[] args) {
       do_action(args[0]);
   }
   public static void do_action(final String filename) {
       List<ArrayList<Integer>> lists = new ArrayList<ArrayList<Integer>>();
       for (int i = 0; i < 3; i++) {
           lists.add(new ArrayList<Integer>());
       }
       BufferedReader br = null;
       try {
           // ファイルを読んで、3 つの List<Integer> に値を保存する
           br = new BufferedReader(new FileReader(filename));
           String line = null;
           while ((line = br.readLine()) != null) {
               // 行の n 番目の整数を lists[n] に追加する。
               List<Integer> ints = parse_line(line);
               for (int i = 0; i < 3; i++) {
                   (lists.get(i)).add(ints.get(i));
               }
           }
           // lists を 3 つの Integer[] に変換する
           Integer[] a = new Integer[lists.get(0).size()];
           lists.get(0).toArray(a);
           Integer[] b = new Integer[lists.get(1).size()];
           lists.get(1).toArray(b);
           Integer[] c = new Integer[lists.get(2).size()];
           lists.get(2).toArray(c);
           // Integer[] の内容を表示する。
           show_array(a, "a = ");
           show_array(b, "b = ");
           show_array(c, "c = ");
       } catch (Exception ex) {
           System.out.println(ex);
       } finally {
           try {
               if (br != null) {
                   br.close();
               }
           } catch (Exception ex) {
               // ignore error
           }
       }
   }
   // 一行の文字列を 3 つの数字として parse する。
   private static List<Integer> parse_line(String line) throws Exception {
       List<Integer> ans = new ArrayList<Integer>();
       StringTokenizer st = new StringTokenizer(line, " ");
       if (st.countTokens() != 3) {
           throw new Exception("Bad line: [" + line + "]");
       }
       while (st.hasMoreElements()) {
           String s = st.nextToken();
           try {
               ans.add(Integer.parseInt(s));
           } catch (Exception ex) {
               throw new Exception("Bad Integer in " + "[" + line + "]. " + ex.getMessage());
           }
       }
       return ans;
   }
   // Integer[] の内容を表示する。
   private static void show_array(Integer[] array, String message) {
       System.out.print(message + "[");
       StringBuilder sb = new StringBuilder();
       for (Integer val : array) {
           if (sb.length() > 0) {
               sb.append(", ");
           }
           sb.append(val);
       }
       System.out.println(sb + "]");
   }
```
次のテキストファイルを用意しました。
data.txt
```
02 34 343
34 23 532
324 4325 543
23 33 43
```
実行結果:
```
a = [2, 34, 324, 23]
b = [34, 23, 4325, 33]
c = [343, 532, 543, 43]
```
1 誤字

katoy

katoy score 21319

2015/09/13 16:19  投稿

ファイルを一行ずつ読みます。
3 つの List<Integer> を用意します。
1行を3つの整数として解釈します。(解釈の失敗したら、例外を投げます)
1行を3つの整数として解釈します。(解釈に失敗したら、例外を投げます)
それぞれの整数を List<Integer> の保存します。
全ての行を処理したら、List<Integer> を Integer[] に変換します。
```java
// See https://teratail.com/questions/16077
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
public class ReadInt extends Sample {
   public static void main(String[] args) {
       do_action(args[0]);
   }
   public static void do_action(final String filename) {
       List<ArrayList<Integer>> lists = new ArrayList<ArrayList<Integer>>();
       for (int i = 0; i < 3; i++) {
           lists.add(new ArrayList<Integer>());
       }
       BufferedReader br = null;
       try {
           // ファイルを読んで、3 つの List<Integer> に値を保存する
           br = new BufferedReader(new FileReader(filename));
           String line = null;
           while ((line = br.readLine()) != null) {
               // 行の n 番目の整数を lists[n] に追加する。
               List<Integer> ints = parse_line(line);
               for (int i = 0; i < 3; i++) {
                   (lists.get(i)).add(ints.get(i));
               }
           }
           // lists を 3 つの Integer[] に変換する
           Integer[] a = new Integer[lists.get(0).size()];
           lists.get(0).toArray(a);
           Integer[] b = new Integer[lists.get(1).size()];
           lists.get(1).toArray(b);
           Integer[] c = new Integer[lists.get(2).size()];
           lists.get(2).toArray(c);
           // Integer[] の内容を表示する。
           show_array(a, "a = ");
           show_array(b, "b = ");
           show_array(c, "c = ");
       } catch (Exception ex) {
           System.out.println(ex);
       } finally {
           try {
               if (br != null) {
                   br.close();
               }
           } catch (Exception ex) {
               // ignore error
           }
       }
   }
   // 一行の文字列を 3 つの数字として parse する。
   private static List<Integer> parse_line(String line) throws Exception {
       List<Integer> ans = new ArrayList<Integer>();
       StringTokenizer st = new StringTokenizer(line, " ");
       if (st.countTokens() != 3) {
           throw new Exception("Bad line: [" + line + "]");
       }
       while (st.hasMoreElements()) {
           String s = st.nextToken();
           try {
               ans.add(Integer.parseInt(s));
           } catch (Exception ex) {
               throw new Exception("Bad Integer in " + "[" + line + "]. " + ex.getMessage());
           }
       }
       return ans;
   }
   // Integer[] の内容を表示する。
   private static void show_array(Integer[] array, String message) {
       System.out.print(message + "[");
       StringBuilder sb = new StringBuilder();
       for (Integer val : array) {
           if (sb.length() > 0) {
               sb.append(", ");
           }
           sb.append(val);
       }
       System.out.println(sb + "]");
   }
```
次のテキストファイルを用意しました。
data.txt
```
02 34 343
34 23 532
324 4325 543
23 33 43
```
実行結果:
```
a = [2, 34, 324, 23]
b = [34, 23, 4325, 33]
c = [343, 532, 543, 43]
```

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る