Java读取/格式化数据的方法

来源:爱站网时间:2022-08-17编辑:网友分享
Java读取/格式化数据的方法你知道是怎样的吗?带着这个问题,爱站技术频道小编在此提供了相关资料给大家阅读,有这方面需求的小伙伴一定不要错过这篇文章。

问题描述


我有一项任务,我必须从文本文件中读取数据。文件中的数据如下所示:

1946-01-01;07:00:00;-1.8;G 1946-01-01;13:00:00;-1.0;G 1946-01-01;18:00:00;-1.9;G 1946-01-02;07:00:00;-1.7;G 我想格式化数据并将其放入适当的数据结构中,以便随后可以搜索两个日期之间所有日期的平均温度。当我的代码是时,格式化此数据的最简单方法是什么:

package algo.weatherdata;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.time.LocalDate;
import java.util.List;

/**
 * Provides methods to retrieve temperature data from a weather station file.    
 */
public class WeatherDataHandler {
    /**
     * Load weather data from file.
     * 
     * @param filePath path to file with weather data
     * @throws IOException if there is a problem while reading the file
     */
    public void loadData(String filePath) throws IOException {
        //Read all weather data
        List fileData = Files.readAllLines(Paths.get(filePath));

        /**
         * TODO: Format data and put it in appropriate data structure.
         */


    }

思路一:


您可以遍历行,并用定界符分隔每行(在您的情况下为;:]

public void loadData(String filePath) throws IOException {
    List fileData = Files.readAllLines(Paths.get(filePath));

    String[] lineValues = str.split(";");
    // line values are stored in this array
}

然后,您可以根据需要处理数组(存储它们,对其进行处理)。

思路二:


假设下面的类将包含天气数据:

public class WeatherData {

    private LocalDateTime dateTime;
    private double temperature;
    private String tag;            // I don't really know what is 'G' mean

    public WeatherData(LocalDateTime dateTime, double temperature, String tag) {
        this.dateTime = dateTime;
        this.temperature = temperature;
        this.tag = tag;
    }
}

接下来,我们将数据文件分析为当前结构并将它们全部收集到列表中:

private List weatherData = new ArrayList();

public void loadData(String filePath) throws IOException {
    List fileData = Files.readAllLines(Paths.get(filePath));
    for(String str : fileData) {
        List parsed = parseData(str);
        LocalDateTime dateTime = LocalDateTime.of(dateOf(parsed.get(0)), 
                                                  timeOf(parsed.get(1)));
        double temperature = Double.parseDouble(parsed.get(2));
        String tag = parsed.get(3);

        WeatherData weather = new WeatherData(dateTime, temperature, tag);
        weatherData.add(weather);
    }

}

private List parseData(String s) {
    return Arrays.asList(s.split(";"));
}

private LocalDate dateOf(String date) {
    return LocalDate.parse(date);
}

private LocalTime timeOf(String time) {
    return LocalTime.parse(time);
}

然后您可以使用列表在日期之间搜索并计算平均温度

思路三:


我在工作空间的[[Dinar Zaripov以上代码段中尝试过,并为dateTime,temperature和tag生成了getter方法。

for循环后的继续

private static float averageTemperature(List weatherData) { float sum = 0; // Variable to store the sum float count = 0; // Variable to keep the count if (weatherList != null) { for (WeaterData averageWeather : weatherData) { float value = averageWeather.getTemperature(); System.out.println(value); if (value 0) ? (sum /count) : 0; // Calculate the average if there were any negative numbers }

但是我的平均数是**平均数:1.5999999 **但是根据数学,它应该是1.6。有人可以告诉我如何吗?还是这个正确?

当我提供以下数据时,我得到的是正确的平均值:)

1946-01-01;07:00:00;-1.8;A ** 1946-01-01;13:00:00;-1.1; B** 1946-01-01;18:00:00;-1.9;C 1946-01-02;07:00:00;-1.7;D

Java读取/格式化数据的方法都了解清楚了没有,不懂的话可以随时来联系小编解答。想要获取更多精彩的技术文章内容,可以来爱站技术频道网站翻阅相关文章阅读。

上一篇:java读取文件和创建数组的解决方法

下一篇:java使用许可证Maven插件的思路

您可能感兴趣的文章

相关阅读

热门软件源码

最新软件源码下载