java - JAVA8,解析文本文件并将其值解析为对象
问题描述
我有如下所示的特定文本文件:
name: meeting_name1
description:
04/18/2012 00:00:00
05/18/2012 00:00:00
... (more dates)
07/18/2012 00:00:00
name: meeting_name2
description: some_desc
04/18/2012 00:00:00
05/18/2012 00:00:00
... (more dates)
07/18/2012 00:00:00
(etc)
我有看起来像这样的java对象:
class Meeting {
String name;
String description;
List<Date> dates;
}
我的意思是读取文件、解析值、创建对象并将它们保存到数据库。
我可以逐行读取文件并将其转换为List<String>
,即。所有数据在一起。`我可以用值创建和填充一个 java 对象并将其保存到数据库中。
我的问题是如何找出我在新对象开始的日期和行(名称:meeting_name2)的末尾。
所以我可以制作类似于List<List<String>>
whereList<String>
将等于一个对象的东西,即。List<Meeting>
?
不确定它是否可以理解,抱歉格式化。
解决方案
假设您可以将文件数据读取到 List 变量。(见上面的答案)
List<String> lines = Files.readAllLines(Paths.get("FILE_NAME"));
现在,您可以看到下面的代码作为演示。这是简单的循环和 if else 语句。希望它会帮助你。
public static void main(String[] args) throws ParseException {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
List<String> data = new ArrayList<>();
data.add("name: meeting_name1");
data.add("description: some_desc");
data.add("07/18/2012 00:00:00");
data.add("07/18/2012 00:00:00");
data.add("name: meeting_name2");
data.add("description: some_desc");
data.add("07/18/2012 00:00:00");
List<Meeting> result = new ArrayList<>();
Meeting temp = null;
for (String line : data) {
if (line.startsWith("name:")) {
temp = new Meeting(line.split(":")[1].trim());
result.add(temp);
} else if (line.startsWith("description:")) {
temp.setDescription(line.split(":")[1].trim());
} else {
temp.getDates().add(simpleDateFormat.parse(line)); // Use date for
}
}
System.out.println(result.get(0).getName() + ": " + result.get(0).getDates().size()); // meeting_name1: 2
System.out.println(result.get(1).getName() + ": " + result.get(1).getDates().size()); // meeting_name2: 1
}
static class Meeting {
String name;
String description;
List<Date> dates;
public String getName() {
return name;
}
public List<Date> getDates() {
return dates;
}
Meeting(String name) {
this.name = name;
this.dates = new ArrayList<>();
}
public void setDescription(String description) {
this.description = description;
}
}
推荐阅读
- r - R - ggplot2 - 当 x 轴是因子变量时,如果 geom_errorbar 超出限制,则添加箭头
- flutter - 如何正确聚焦基于焦点节点的 hasFocus 值有条件地创建的文本字段?
- json - 如何使用正则表达式匹配文档的第一个左大括号
- react-native - 是否有任何来自 detox 的预定义标志,我可以知道 App 正在 detox 上运行?
- javascript - 为什么 JavaScript bind() 调用将函数的参数反转?
- html - 如何解决网站上显示的 HTML 评论
- javascript - 如何使用 Deck.gl 显示多个 PathLayer
- python - 函数和列表 - 如何使用函数关联两个列表?
- swift - 在深色主题手机上使用“浅色主题”地图
- xcode - 在新 Xcode 中为应用程序的切片版本生成多个 IPA 文件