回答編集履歴

2 追記

argius

argius score 9504

2015/09/11 22:53  投稿

必ずこうしなければならないわけでは無いですが、
①ファイルを1行ずつ読み込む
②1行を`String`配列にする
③`String`配列を`int`配列にする。
のように分けて考えると分かりやすいです。
`int`配列の数がいくつになることを想定しているか分かりませんので、それ以上は回答できません。
①ファイルを1行ずつ読み込む
Javaのバージョンによってもやり方が違うので、手前味噌で恐縮ですが、下記のブログを参考にしてください。
[Javaで1行ずつテキストデータを読み込むイディオムの変遷 - argius note](http://argius.hatenablog.jp/entry/2015/06/06/234315)
Java7以上で使えるパターンを書いておきます。
```lang-java
// import java.util.*; // Iterator, Scanner
// コンストラクター Scanner(File) は throws FileNotFoundException
try (Scanner scanner = new Scanner(new File("ファイル名"))) {
   while (scanner.hasNextLine()) {
       String line = scanner.nextLine();
       // ...
   }
}
```
②1行を`String`配列にする
`line`として読み込んだ1行を半角スペースで分割するには、
```lang-java
String line = ...;
String[] stringArray = line.split(" ");
```
とするのが手っ取り早いです。
`Scanner.nextInt`を使う手もありますが、配列に変換するのが面倒なので。
③`String`配列を`int`配列にする。
いろいろやり方はありますが、どのようなケースでも対応できるようにシンプルに行きましょう。
```lang-java
String[] stringArray = ...;
int n = stringArray.length;
int[] intArray = new int[n];
for (int i = 0; i < n; i++) {
   try {
       intArray[i] = Integer.parseInt(stringArray[i]);
   } catch (NumberFormatException e) {
       // 文字列がintに変換できる形式でなかった場合
   }
}
```
```
---
(追記)
Java8だと、こういうやり方もあります。
```lang-java
import java.io.*;
import java.nio.file.*;
import java.util.*;
import java.util.stream.*;
public final class App {
   public static void main(String[] args) {
       try (Stream<String> lines = Files.lines(Paths.get("input.txt"))) {
           lines.forEach(x -> {
               int[] intArray = Stream.of(x.split(" ")).mapToInt(Integer::parseInt).toArray();
               System.out.println("int array=" + Arrays.toString(intArray));
           });
       } catch (IOException e) {
           e.printStackTrace();
       }
   }
```
1 throws FileNotFoundExceptionについて追記

argius

argius score 9504

2015/09/11 18:42  投稿

必ずこうしなければならないわけでは無いですが、
①ファイルを1行ずつ読み込む
②1行を`String`配列にする
③`String`配列を`int`配列にする。
のように分けて考えると分かりやすいです。
`int`配列の数がいくつになることを想定しているか分かりませんので、それ以上は回答できません。
①ファイルを1行ずつ読み込む
Javaのバージョンによってもやり方が違うので、手前味噌で恐縮ですが、下記のブログを参考にしてください。
[Javaで1行ずつテキストデータを読み込むイディオムの変遷 - argius note](http://argius.hatenablog.jp/entry/2015/06/06/234315)
Java7以上で使えるパターンを書いておきます。
```lang-java
// import java.util.*; // Iterator, Scanner
// コンストラクター Scanner(File) は throws FileNotFoundException  
try (Scanner scanner = new Scanner(new File("ファイル名"))) {
   while (scanner.hasNextLine()) {
       String line = scanner.nextLine();
       // ...
   }
}
```
②1行を`String`配列にする
`line`として読み込んだ1行を半角スペースで分割するには、
```lang-java
String line = ...;
String[] stringArray = line.split(" ");
```
とするのが手っ取り早いです。
`Scanner.nextInt`を使う手もありますが、配列に変換するのが面倒なので。
③`String`配列を`int`配列にする。
いろいろやり方はありますが、どのようなケースでも対応できるようにシンプルに行きましょう。
```lang-java
String[] stringArray = ...;
int n = stringArray.length;
int[] intArray = new int[n];
for (int i = 0; i < n; i++) {
   try {
       intArray[i] = Integer.parseInt(stringArray[i]);
   } catch (NumberFormatException e) {
       // 文字列がintに変換できる形式でなかった場合
   }
}
```

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