【问题标题】:How to read the last group of numbers on a line in a .txt file in Java如何在Java中读取.txt文件中一行的最后一组数字
【发布时间】:2017-03-28 17:57:55
【问题描述】:

我目前有一个如下所示的文本文件:

Bob Peach 1000 115
Hugh Mungus 1001 250
Joe Bloggs 1003 555
Joe Walsh 1004 6
Ben Davis 1005 1

我需要读取最后一组数字,将它们相加,然后将答案输出到单独的文本文件中。我该怎么办?

编辑:预期结果应该是输出文件中的字符串,如下所示:

There are currently 927 points.

编辑 2:很抱歉没有更好地解释它,但我现在已经修改了使用实际名称而不是占位符的虚拟文件的外观。如您所见,最后一组数字之前的字符数量并不总是相同。

编辑 3:这是我在等待回复时尝试过的,通常是我认为它应该工作的方式。

public void processFiles()
{        
    total = 0;
    while(input.hasNextInt())
    {
        input.nextInt();
        total = total + input.nextInt();
        input.nextLine();
    }

    output.print("There are all together " + 
                 total + " points.");
}

然而,上面的代码只是输出有 0 分。

编辑 4:

public void processFiles()
{        
    total = 0;
    while(input.hasNext())
    {
        String line = input.nextLine();
        String[] splitLine = line.split(" ");
        total += Integer.parseInt(splitLine[splitLine.length - 1]);
    }

    output.print("There are all together " + 
                 total + " points.");
}

【问题讨论】:

  • 你应该发布你的预期结果,到目前为止你尝试了什么?
  • 我目前在砖墙上,但我尝试使用 Scanner.nextInt() 将其定向到第一组数字,但从那里我无法弄清楚如何使用它最后一组。
  • 再次调用 Scanner.nextInt() 即可。
  • 你是什么意思,phatfingers?我现在已经包含了我的解释。
  • @Dacnomaniac 砖墙比混凝土好 ;-) 你试过我的解决方案了吗? (顺便说一句,这和罗杰提议的差不多……)

标签: java input output


【解决方案1】:

假设仅提供信息(行项目由单个空格分隔,最后一项始终是您想要的数字)您可以读取文件中的每一行并在每一行上执行以下操作。

String[] splitLine = line.split(" ");
total += Integer.parseInt(splitLine[splitLine.length - 1]);

阅读文件并循环遍历每一行留给读者作为练习。

【讨论】:

  • 我想我遗漏了一些东西,因为每当我尝试使用它进行编译时,我都会收到一条错误消息,提示“找不到符号 - 行”。
  • @Dacnomaniac,在此示例中,“line”将是您从文件中为每一行读取的字符串。
  • @Dacnomaniac,您可以在 Plirkee 的示例中看到 line 的来源。
【解决方案2】:

试试这样的...

您只需逐行读取文件,使用space 字符分割每一行,并将行的最后一部分转换为integer

int sum=0;
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
    String line;
    while ((line = br.readLine()) != null) {
       String[] res = line.split(" ");
       sum = sum + Integer.parseInt(res[res.length - 1]);
    }
}

【讨论】:

  • @Piklee 在睡了之后,我尝试了你的解决方案,但是使用了扫描仪类的一部分,但是它并没有像我预期的那样工作,并且仍然将点的总和输出为 0 . 参考编辑看看它现在的样子。
  • @Dacnomaniac 好吧,如果您使用的是扫描仪......那么这不完全是我的解决方案,现在,是吗?此外,您发布的是部分代码......从中看不到input 变量是什么......我们只能猜测您的代码出了什么问题。我建议调试(使用断点),在每次迭代时打印出 linesplitLine[]total 的值 - 这样你会找到确切的问题......并且可能会在不需要任何情况下修复它外部帮助...
【解决方案3】:

如果字符串总是有相同的行数,你可以这样做

String LikesDislikes = "Likes: 10
                        Dislikes:10"

String[] lines = LikesDislikes.split("\\n");
            String likes = lines[0];
            String dislikes = lines[1];

【讨论】:

  • 不幸的是,行数总是不同。
猜你喜欢
  • 1970-01-01
  • 2015-01-24
  • 2022-09-23
  • 2019-02-25
  • 2019-03-02
  • 1970-01-01
  • 2018-12-23
  • 1970-01-01
  • 2018-02-25
相关资源
最近更新 更多