目标是从大文件(多行中的多个单词和数字)读取每个单词到二维数组。为此,我尝试将每个单词从文件读取到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]);
}
}
答案 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))