2015-12-04 64 views
1

我有問題,將包含整數的文件存儲到帶有這些值的2d int數組中。該文件具有以下格式:使用來自java中的文件的值使2d int數組

1 19  36 
1 4  212 
1 2  732 
2 9  111 
2 1  66 
2 12  29 
2 19  14 
2 17  65 
3 2  17 
3 11  38 
3 14  122 
3 17  211 
3 1  390 
3 18  78 
3 9  11 
4 3  273 
4 5  29 
4 12  42 
5 4  122 
5 16  12 

請注意,某些行上有一些尾隨空格。您可以查看完整文件here

這是我到目前爲止。我讀取文件並將每行放入數組列表中。我認爲這會更容易,因爲那樣我就可以解析整數並將它們放入二維數組中,但我遇到了問題。有什麼建議麼?

private void readRoadFile() 
{ 
    String line = null; 
    try 
    { 
     FileReader fr = new FileReader("road.dat"); 
     BufferedReader br = new BufferedReader(fr); 
     while((line = br.readLine()) != null) 
     { 
      roadInfo.add(line); 
     } 
     br.close(); 
    } catch(FileNotFoundException e) 
    { 
     System.out.println("File does not exist"); 
    } catch(IOException e) 
    { 
     System.out.println("Error reading file"); 
    } 
} 
+2

「我有問題」是什麼意思?什麼是'roadInfo'的類型?也許解析'line'有幫助(如果你有一個強制性異常)。 –

+0

我的問題是,我不知道如何將信息放入2d int數組。 roadInfo是字符串@JulianL的數組列表。 –

+0

也許你可以用你的問題的代碼塊中的整數發佈你的文件,它會讓答案更容易。 – RAnders00

回答

0

你應該分析串並變換你的ArrayList到一個數組:

List<int[]> roadInfo = new ArrayList<>(); 

    try (BufferedReader reader = new BufferedReader(new FileReader("road.dat"))) { 

     for (String line = reader.readLine(); line != null; line = reader.readLine()) { 

      String[] split = line.split("\t"); // or \\s+ 
      int[] numbers = new int[split.length]; 

      for (int i = 0; i < split.length; i++) { 
       numbers[i] = Integer.parseInt(split[i].trim()); 
      } 

      roadInfo.add(numbers); 
     } 

    } catch (IOException e) { 
     throw new RuntimeException(e); 
    } 

    int[][] twoDArray = roadInfo.toArray(new int[roadInfo.size()][]); 
0

您可以採用如下方案 - 它採用了流行的Java 8流,以簡化數據流。

@Override 
public void run() 
{ 
    List<List<Integer>> result = new ArrayList<>(); 
    try (FileInputStream fileInputStream = new FileInputStream("stackoverflow-q-34096490.txt"); 
     InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, StandardCharsets.UTF_8); 
     BufferedReader bufferedReader = new BufferedReader(inputStreamReader)) 
    { 
     for (String line = bufferedReader.readLine(); line != null; line = bufferedReader.readLine()) 
      result.add(Arrays.stream(line.split("\\s+")).filter(s -> !s.isEmpty()).map(Integer::parseInt).collect(Collectors.toList())); 
    } catch (IOException ioe) 
    { 
     System.err.println("Read failure!"); 
     ioe.printStackTrace(); 
    } 

    // use result 
    System.out.println(result); 
} 
相關問題