为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕侠2389804 2022-07-27 16:37:36
我有一个包含多行的文本文件,每行 3 个逗号分隔的条目。例子:苏联,Larisa_LATYNINA,18美国,Michael_PHELPS,16苏联,Nikolay_ANDRIAOV,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());        }但每次我尝试运行它时都会出错。我不确定如何将文件中的每个“列”分成它们自己的数组。如果我使用useDelimiter(",");而不是useDelimiter(" , ");我得到以下异常:Exception in thread "main" java.util.InputMismatchExceptionat java.base/java.util.Scanner.throwFor(Scanner.java:939)at java.base/java.util.Scanner.next(Scanner.java:1594)at java.base/java.util.Scanner.nextInt(Scanner.java:2258)at java.base/java.util.Scanner.nextInt(Scanner.java:2212)at OlympicWinners.main(OlympicWinners.java:14)这是我得到的错误。第 14 行是Medals.add(input.nextInt());
查看完整描述

3 回答

?
喵喔喔

TA贡献1735条经验 获得超5个赞

从您的文本示例中,分隔符不是用空格 ( " , ") 包围的逗号,而只是一个逗号 ( ",")。删除这些空格,你应该没问题:

input.useDelimiter(",");


查看完整回答
反对 回复 2022-07-27
?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

你得到InputMismatchException是因为最后一行input.nextInt()返回


"18 

United States"

由于and之间没有,分隔符(但有行分隔符),每个标记从分隔符返回到分隔符。18United States\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]));

}


查看完整回答
反对 回复 2022-07-27
?
慕森卡

TA贡献1806条经验 获得超8个赞

请将您的代码修改为:


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);


    }


}

在 test.xml 中:


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]


查看完整回答
反对 回复 2022-07-27
  • 3 回答
  • 0 关注
  • 140 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信