2015-07-11 98 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 =新的扫描仪(新文件(文件名))

相关问题