2015-07-11 97 views
0

目標是將大文件(多行中的多個單詞和數字)中的每個單詞讀取到2d數組。爲此,我試圖從文件讀取每個單詞到一個ArrayList,而不是將ArrayList轉換爲一個2d數組。但是,我爲2d數組的每個元素獲得的輸出是文件名。將字符串從文件讀取到ArrayList,然後轉換爲數組

部分文件:

1 - 阿倫,小姐伊麗莎白·沃爾頓女
11佳佳,碩士。哈德森特雷弗男性
1 0佳佳,小姐。海倫·洛雷女
1 0佳佳,哈德森先生約書亞克賴頓男30
1 0佳佳,哈德森夫人JC(貝西·沃爾多·丹尼爾斯)女25

我的代碼:

public class Titanic { 

private final static String fileName = "/Users/Andrew/Desktop/titanic.txt"; 


public static void main(String[] args) { 

    Scanner s1 = new Scanner (fileName); 
    ArrayList<String> list = new ArrayList<String>(); 
    while (s1.hasNext()) { 
     list.add(s1.next()); 
    } 
    s1.close(); 


    String[][] data = new String [list.size()][9]; 

    for (int i = 0; i < list.size(); i++) { 
     for (int j = 0; j < 9; j++) { 
      data[i][j] = list.get(i); 
     } 
    } 

    System.out.println(data[0][0]); 

    } 
} 
+0

你在閱讀這些格式是有點混亂。您無法保證所有參賽作品有9個令牌;在你最後的情況下,你有12個。 – Makoto

回答

0

你需要一個File傳遞給您的Scanner。您可以使用「user.home」來獲取主文件夾。我會讀到List<String[]>(並使用diamond operator <>),您可以使用Arrays.deepToString(Object[])try-with-resources。像

private final static String fileName = "Desktop/titanic.txt"; 

public static void main(String[] args) { 
    List<String[]> list = new ArrayList<>(); 
    try (Scanner s1 = new Scanner(new File(System.getProperty("user.home"), 
      fileName))) { 
     while (s1.hasNextLine()) { 
      list.add(s1.nextLine().split("\\s+")); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    int pos = 0; 
    String[][] data = new String[list.size()][]; 
    for (String[] arr : list) { 
     data[pos++] = arr; 
    } 
    System.out.println(Arrays.deepToString(data)); 
} 
+0

這個工程,謝謝你。我明白了爲什麼現在我得到了這個輸出。 – smus87

0

變化 掃描器S1 =新掃描儀(文件名);在這種情況下,你傳遞一個字符串給函數,需要傳遞一個文件。 到 掃描儀S1 =新的掃描儀(新文件(文件名))

相關問題