如何忽略文本文件的元素? - 爪哇

问题描述 投票:0回答:1

对于我正在处理的当前文件,我需要将所有双精度数加到一个总和中,同时忽略布尔值。虽然直接回答这个问题会很好,但我想要一个关于如何在未来忽略某些值的整体方法。

以文本文件为例,其格式如下:int " “布尔值” “整数” " 布尔值等 20 行(10 个整数,10 个布尔值)。

我的教授要我做的代码要求它是方法形式而不是测试类形式。

代码如下:

public double sumWithoutBoolean(File file) {
            double sum =0;
            try {
            Scanner input = new Scanner(file);
            while(input.hasNextBoolean()) {
                boolean line2 = input.nextBoolean();
                String line = Boolean.toString(line2);
                if (line.equalsIgnoreCase("true")||line.equalsIgnoreCase("false")) {
                    line="0";
                }
            while (input.hasNextLine()) {
                }
            try {
                    sum+=Double.parseDouble(line);
                }
                catch (NumberFormatException e){
                    System.out.println("Error Found");
                }
            }
            input.close();
        }catch (FileNotFoundException e) {
            System.out.println("File Not Found.");
        }       
            return sum;
        }
    

在运行了多个想法之后,这是我设法没有错误地运行的一个,尽管我确信有一个更紧凑的想法。

java text-files
1个回答
0
投票

你可以这样做:

import java.nio.file.Files;
import java.nio.file.Path;

public class LineSummer {
    public static void main(String[] args) {
        try {
            double sum = Files.lines(Path.of(args[0]))
                    .filter(s -> s.matches("\\d*\\.?\\d+"))
                    .mapToDouble(Double::valueOf)
                    .sum();

            System.out.printf("Sum of numbers is %.2f%n", sum);
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.