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
但是我的平均数是**平均数: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读取/格式化数据的方法都了解清楚了没有,不懂的话可以随时来联系小编解答。想要获取更多精彩的技术文章内容,可以来爱站技术频道网站翻阅相关文章阅读。