Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.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 将逗号分隔的文本文件分隔到数组_Java_Arrays_Separator - Fatal编程技术网

Java 将逗号分隔的文本文件分隔到数组

Java 将逗号分隔的文本文件分隔到数组,java,arrays,separator,Java,Arrays,Separator,我有一个多行的文本文件,每行有3个逗号分隔的条目 例如: 苏联,拉里萨·拉提尼娜,18岁 美国,迈克尔·菲尔普斯,16岁 苏联,尼古拉·安德里亚诺夫,15岁 我试着把它们分成3组,1组代表国家,1组代表个人,1组代表奖牌 ArrayList<String> country = new ArrayList<>(); ArrayList<String> name = new ArrayList<>();

我有一个多行的文本文件,每行有3个逗号分隔的条目

例如:

苏联,拉里萨·拉提尼娜,18岁
美国,迈克尔·菲尔普斯,16岁 苏联,尼古拉·安德里亚诺夫,15岁

我试着把它们分成3组,1组代表国家,1组代表个人,1组代表奖牌

        ArrayList<String> country = new ArrayList<>();
        ArrayList<String> name = new ArrayList<>();
        ArrayList<Integer> medals = new ArrayList<>();
        java.io.File file = new java.io.File("Olympics.txt");
        Scanner input = new Scanner(file);
        input.useDelimiter(" , ");
        while(input.hasNext()) {
            country.add(input.next());
            name.add(input.next());
            medals.add(input.nextInt());
        }
这就是我得到的错误。第14行是

Medals.add(input.nextInt());

从文本示例中,分隔符不是一个用空格(
“,”
)包围的逗号,而是一个逗号(
“,”
)。删除这些空格,您应该可以:

input.useDelimiter(",");

由于最后一行
input.nextInt()
返回,您将获得
inputmaschException

"18 
United States"
由于在
18
美国之间没有
分隔符(但有行分隔符
\n
),每个标记都从一个分隔符返回到另一个分隔符

您应该读取文件中的所有行,并使用分隔符拆分它们:

List<String> lines = Files.readAllLines(Paths.get("Olympic.txt"));

for (String line : lines) {
    String[] fields = line.split(",");
    country.add(fields[0]);
    name.add(fields[1]);
    medals.add(Integer.valueOf(fields[2]));
}
List lines=Files.readAllLines(path.get(“Olympic.txt”);
用于(字符串行:行){
String[]fields=line.split(“,”);
country.add(字段[0]);
name.add(字段[1]);
添加(整型.valueOf(字段[2]);
}

请将您的代码修改为:

public class Main {

    public static void main(String[] args) throws FileNotFoundException {
        ArrayList<String> country = new ArrayList<>();
        ArrayList<String> name = new ArrayList<>();
        ArrayList<Integer> medals = new ArrayList<>();
        BufferedReader reader;
        try {
            reader = new BufferedReader(new FileReader("F://test.txt"));
            String line = reader.readLine();
            while (line != null) {
                String[] lineParts = line.split(",");
                country.add(lineParts[0]);
                name.add(lineParts[1]); 
                medals.add(Integer.valueOf(lineParts[2]));
                line = reader.readLine();
            }
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println(country);
        System.out.println(name);
        System.out.println(medals);

    }

}
代码的输出:

[Soviet Union, United States, Soviet Union]
[Larisa_LATYNINA, Michael_PHELPS, Nikolay_ANDRIANOV]
[18, 16, 15]

请显示a(特别是错误、预期和当前输出)。请遵守命名约定,变量名称始终为小写。因此,
国家
名称
奖牌
。请注意,您可能还希望按行读取,然后按逗号分隔。否则,您可能会切换到下一行而没有注意到,因为输入错误。相关内容:
List lines=Files.readAllLines(path.get(“Olympics.txt”)
。然后
String[]data=line.split(“,”)。仅供记录:A)编写您自己的CSV解析器逻辑是一个很好的练习,但在现实世界中,您最好使用许多现有库中的一个。你在这里重新发明轮子(重复其他人过去犯的所有错误)B)小心地将这些信息放入3个不同的列表中,并通过索引“连接”它们。而是考虑创建一个在你的文件中建模一个行的类,就像一个“奖牌获得者”。该类将有三个字段(用于国家、名称和计数)。然后将该类的一个对象放在一个列表中。您使用三个列表来表示属于一个对象的数据的想法与您在良好的OOP中处理此类任务的方式完全相反。似乎无法解决问题。这就是我得到的:java.base/java.util.Scanner.throwFor(Scanner.java:939)java.base/java.util.Scanner.next(Scanner.java:1594)java.base/java.util.Scanner.nextInt(Scanner.java:2258)java.base/java.util.Scanner.nextInt(Scanner.java:2212)在OlympicWinners.main(OlympicWinners.java:14)@BenjaminWu无法解决您的问题。我们现在只能猜测。提供一个。尝试了您的解决方案,但我在线程“main”java.lang.ArrayIndexOutOfBoundsException中遇到异常:索引1超出了OlympicWinners.main(OlympicWinners.java:14)的长度1,第14行是name.add(字段[1]);@BenjaminWu确保在您的txt文件中,每行正好有3个字段(如美国)是否会影响此?@BenjaminWu否。有指定的分隔符
.split(“,”)
。空格是ignored@BenjaminWu
ArrayIndexOutOfBoundsException:出现索引1
很可能是因为txt文件中的一行只有国家值,但没有名称和勋章
Soviet Union,Larisa_LATYNINA,18
United States,Michael_PHELPS,16
Soviet Union,Nikolay_ANDRIANOV,15
[Soviet Union, United States, Soviet Union]
[Larisa_LATYNINA, Michael_PHELPS, Nikolay_ANDRIANOV]
[18, 16, 15]