Java 将逗号分隔的文本文件分隔到数组
我有一个多行的文本文件,每行有3个逗号分隔的条目 例如: 苏联,拉里萨·拉提尼娜,18岁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<>();
美国,迈克尔·菲尔普斯,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@BenjaminWuArrayIndexOutOfBoundsException:出现索引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]