2014-12-04 77 views
2

我有一個輸入文件名爲「animals.txt」:從文本文件中讀取數據,並建設有數組表

sheep 10.5 12.3 4 
horse 8.4 11.2 7 
cow 13.7 7.2 10 
duck 23.2 2.5 23 
pig 12.4 4.6 12 

把我的問題,簡單地說,我想知道如何存儲4將數據列從輸入文件分成4個獨立的1維數組。

輸出應該像這樣的事情...

[sheep, horse, cow, duck, pig] 
[10.5, 8.4, 13.7, 23.2, 12.4] 
[12.3, 11.2, 7.2, 2.5, 4.6] 
[4, 7, 10, 23, 12] 

到目前爲止,我已經想通了如何將所有數據存儲到一個大陣,但我需要知道如何打破下來,而是將每列存儲到自己的數組中。

我的代碼:

public static void main(String[] args) throws FileNotFoundException { 

    String[] animal = new String[5]; 
    int index = 0; 

    File file = new File("animals.txt"); 
    Scanner input = new Scanner(file); 

    while (input.hasNextLine() && index < animal.length) { 
     animal[index] = input.nextLine(); 
     index++; 
    } 

回答

0

如果輸入文件的結構保證,那麼你可以使用掃描儀來獲取你需要的數據。首先用適當的類型聲明你想要的4個數組。

然後在你的while循環使用:

input.next() 

得到一個字符串

input.nextInt() 

得到一個整數和

input.nextDouble() 

獲得雙重價值。當然,您可以將這些值分配給適當的數組。

1

你可以使用一個數組的數組來存儲你所需要的,如:

String[][] animal = new String[5][]; 

然後,當你讀文件,存儲所有的值的數組,像這樣:

while (input.hasNextLine() && index < animal.length) { 
    animal[index] = input.nextLine().split(" "); //split returns an array 
    index++; 
} 

然後,當你想輸出,數組的數組經過短短循環:

for (String[] a : animal) 
{ 
    for (int i = 0; i < a.length; i++) 
     System.out.print(a[i] + ", "); 
    System.out.println(""); 
} 
1

下面是代碼的方式來做到這一點 - 您可以將它剪切並粘貼到像Eclipse這樣的IDE中的Java項目中,然後運行它或將其放入一個file.java中,然後在命令行上編譯並運行它。下一步是使其完全一般地採取任何輸入,包括具有可變列數的行,沒有預定的最大值,並且不讀取輸入文件兩次或將其存儲爲數組或其他對象。

import java.io.File; 
import java.io.FileNotFoundException; 

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.Map; 
import java.util.Scanner; 

public class BuildTableWithArrays { 

    private static final String separator = "\\s+"; // regex for parsing lines 
    private static final int rowWidth = 4; 

    public static void main(String[] args) { 

     Map<Integer, ArrayList<String>> columns = buildMapWithColumnArrayLists("animals.txt"); 
     printMap(columns); // for demo 
     // if you want actual arrays 
     Map<Integer, String[]> colArrays = buildMapWithColumnArrays(columns); 

    } 

    public static Map<Integer, ArrayList<String>> buildMapWithColumnArrayLists(
     String fileName) { 

     ArrayList<String> col0 = new ArrayList<String>(); 
     ArrayList<String> col1 = new ArrayList<String>(); 
     ArrayList<String> col2 = new ArrayList<String>(); 
     ArrayList<String> col3 = new ArrayList<String>(); 

     Map<Integer, ArrayList<String>> columns = new HashMap<Integer, ArrayList<String>>(); 
     columns.put(0, col0); 
     columns.put(1, col1); 
     columns.put(2, col2); 
     columns.put(3, col3); 

     File file = new File(fileName); 
     try { 
      Scanner input = new Scanner(file); 
      while (input.hasNextLine()) { 
       String[] line = input.nextLine().trim().replaceAll(separator, " ") 
        .split(separator); 
       for (int i = 0; i < rowWidth; i++) { 
        if (line[i] == null) { 
         columns.get(Integer.valueOf(i)).add("null"); 
        } else { 
         columns.get(Integer.valueOf(i)).add(line[i]); 
        } 
       } 
      } 
      input.close(); 
     } catch (FileNotFoundException x) { 
      System.out.println(x.getMessage()); 
     } 

     return columns; 
    } 

    public static void printMap(Map<Integer, ArrayList<String>> columns) { 

     for (int i = 0; i < rowWidth; i++) { 
      System.out.println("col" + i + " #elements = " 
       + columns.get(Integer.valueOf(i)).size()); 
      for (String s : columns.get(Integer.valueOf(i))) { 
       System.out.print(s + " "); 
      } 
      System.out.println("\n"); 
     } 
    } 

    public static String[] convertArrayList2Array (ArrayList<String> arrayList) { 

     String[] array = new String[arrayList.size()]; 
     array = arrayList.toArray(array); 
     return array; 

    } 

    public static Map<Integer, String[]> buildMapWithColumnArrays(Map<Integer, ArrayList<String>> columns) { 

     Map<Integer, String[]> cols = new HashMap<Integer, String[]>(); 

     for (Map.Entry<Integer, ArrayList<String>> entry : columns.entrySet()) { 
      Integer key = entry.getKey(); 
      ArrayList<String> value = entry.getValue(); 
      String[] val = convertArrayList2Array(value); 
      cols.put(key,val); 
     } 

     return cols; 

    } 

}