Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将字符串从文件读取到ArrayList,然后转换为数组_Java_Arrays_Arraylist_Java.util.scanner - Fatal编程技术网

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

Java 将字符串从文件读取到ArrayList,然后转换为数组,java,arrays,arraylist,java.util.scanner,Java,Arrays,Arraylist,Java.util.scanner,目标是将每个单词从一个大文件(多行上的多个单词和数字)读取到一个二维数组。为此,我尝试将文件中的每个单词读取到ArrayList,而不是将ArrayList转换为2d数组。但是,我得到的2d数组中每个元素的输出是文件名 文件的以下部分: 艾伦,小姐。伊丽莎白·沃尔顿女 11艾利森,主人。哈德逊·特雷弗男性 10艾莉森,小姐。海伦·罗兰女 10埃里森,哈德森先生约书亚·克雷顿男30 10 Allison,Hudson J C夫人(Bessie Waldo Daniels)女25 我的代码: pub

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

文件的以下部分:

艾伦,小姐。伊丽莎白·沃尔顿女
11艾利森,主人。哈德逊·特雷弗男性
10艾莉森,小姐。海伦·罗兰女
10埃里森,哈德森先生约书亚·克雷顿男30
10 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]);

   }
}
公共级泰坦尼克号{
私有最终静态字符串fileName=“/Users/Andrew/Desktop/titanic.txt”;
公共静态void main(字符串[]args){
扫描仪s1=新扫描仪(文件名);
ArrayList=新建ArrayList();
while(s1.hasNext()){
list.add(s1.next());
}
s1.关闭();
字符串[][]数据=新字符串[list.size()][9];
对于(int i=0;i
您需要将
文件
传递给您的
扫描仪
。您可以使用“user.home”获取主文件夹。我会读一个
列表
(并使用),您可以使用和。差不多

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));
}
private final static String fileName=“Desktop/titanic.txt”;
公共静态void main(字符串[]args){
列表=新的ArrayList();
try(Scanner s1=new Scanner(新文件(System.getProperty(“user.home”),
(文件名){
while(s1.hasNextLine()){
list.add(s1.nextLine().split(\\s+));
}
}捕获(例外e){
e、 printStackTrace();
}
int pos=0;
字符串[][]数据=新字符串[list.size()][];
for(字符串[]arr:list){
数据[pos++]=arr;
}
System.out.println(数组.deepToString(数据));
}
更改 扫描仪s1=新扫描仪(文件名)在这种情况下,您要向函数传递一个字符串,需要传递一个文件。
Scanner s1=新扫描仪(新文件(文件名))

您读取这些文件的格式有点混乱。您不保证在所有条目中都有9个令牌;在你的最后一个案例中,你有12个。这很有效,谢谢。我明白为什么我现在能得到那个结果了。