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

kdfy810k  于 2023-03-11  发布在  Java
关注(0)|答案(2)|浏览(92)

对于我正在处理的当前文件,我需要将所有的双精度值相加,同时忽略布尔值。虽然直接回答这个问题会很好,但我想知道将来如何忽略某些值的总体方法。
对于文本文件的示例,其公式如下:int“\n”布尔型“\n”int“\n”布尔型,依此类推,共20行(10个int型,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;
}

经过运行多个想法,这是一个我已经设法能够运行没有错误,虽然我相信有一个更紧凑的想法。

6yjfywim

6yjfywim1#

你可以这样做:

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();
        }
    }
}
gwbalxhn

gwbalxhn2#

另一个看起来不错的实现可能类似于

public static double sumOnlyDoubles(File file) throws IOException {
            try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
                String line;
                double sum = 0;
                while ((line = reader.readLine()) != null) {
                    if(line.matches("^\\d+$")){
                        sum+=Double.valueOf(line);
                }
            }
             return sum;
    }

这里的概念是,当文件的每一行都有数字时,你就阅读它,并在正则表达式的帮助下检查该行是否是数字,如果是,你就把它加到和中。

相关问题