java - 如何从文本文件中获取 2 个单独的数字平均值?

标签 java text-files inputstream

我是 java 语言的新手,我不知道如何一次从文本文件中读取一行并获取该行的平均值。

到目前为止,我的工作代码获取了整个文件的平均值:

import java.util.Scanner;  
import java.io.*; 

public class NumAverage { 
    public static void main(String[] args) throws IOException { 
        Scanner keyboard = new Scanner(System.in); 

        File myFile = new File("Num.txt"); 
        Scanner inputFile = new Scanner(myFile); 

        int numbersCounter = 0;  
        int sum = 0; 

        while (inputFile.hasNext()) { 
            int numList = inputFile.nextInt(); 

            sum = sum + numList; 
            numbersCounter++; 
        } 

        System.out.println("Average: " + (sum/numbersCounter)); 

        inputFile.close(); 
    } 
}

这是文本文件的样子

 1 2 3 4
 5 6 7 8 

最佳答案

你可以使用 Files.lines()创建一个文本行流,然后将每一行解析为一个数字数组并对它们进行平均。

    Files.lines(Paths.get("nums.txt"))
            .map(str -> str.split(" "))   
            .mapToDouble(arr -> Arrays.stream(arr).mapToInt(Integer::valueOf).average().orElse(0.0))
            .forEach(avg -> System.out.println("Average: " + avg));

Files.lines()处理所有文件 I/O 并创建一个 Stream<String>这允许在从文件中读取每一行时对其进行延迟处理。如果有一天您需要处理内存中放不下的非常大的文件,这将非常有用,因为每一行只有在前一行被 Stream 完全处理后才会被读取。它会在完成后自动为您关闭文件。

下一行获取文件中的每一行并将其转换为一个字符串数组,每个数字一个。那时,流从 Stream<String> 更改为到 Stream<String[]>

下一行将每个 String[] 转换为一个数字,该数字是该行数字的平均值。它通过获取字符串数组并使用 Arrays.stream() 从中创建一个 Stream 来实现。 ,使用 Integer.valueOf() 将每个字符串更改为整数, 然后调用 average()获取整个整数流并计算平均值。此时 Stream 现在是一个 DoubleStream .

下一行取每个平均值并打印出来。

整个操作序列发生在每一行上,因此在从文件中读取下一行之前先打印第一行的平均值。

关于java - 如何从文本文件中获取 2 个单独的数字平均值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36972554/

相关文章:

c# - 如何使用 C# 代码读取文件?

java - 从文本文件导入到 Java 数组

java - 迷惑与势是有关系的

android - 从文本文件android加载微调器

java - 如何判断菜单项是否被点击

java - Bufferedreader 不能一次读取整行?

java - 解压后打开/下载 zip 文件时出现问题 (Java/ZipInputStream)

java - 在关闭文件进行读取之前打开文件进行写入是否不正确?

java - 如何将属性(例如枚举)绑定(bind)到不同类型的组件属性(例如每个枚举的图像)?

java - spring-ws 如何给请求体中的soap action 添加一个属性