将字符串从文件读取到ArrayList,然后转换为数组

时间:2015-07-11 01:40:46

标签: java arrays arraylist java.util.scanner

目标是从大文件(多行中的多个单词和数字)读取每个单词到二维数组。为此,我尝试将每个单词从文件读取到ArrayList,而不是将ArrayList转换为2d数组。但是,我为2d数组的每个元素得到的输出是文件名。

文件的一部分:

  1 1艾伦,小姐。伊丽莎白沃尔顿女郎   1 1 Allison,硕士。哈德森·特雷弗男   1 0 Allison,Miss.Helen Loraine女
  1 0 Allison,Hudson Joshua Creighton先生男30岁   1 0 Allison,Hudson J C夫人(Bessie Waldo Daniels)女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]);

   }
}

2 个答案:

答案 0 :(得分: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));
}

答案 1 :(得分:0)

变化 扫描程序s1 =新扫描程序(fileName); 在这种情况下,您将字符串传递给函数,需要传递一个文件。 以 扫描仪s1 =新扫描仪(新文件(fileName))