我有一个包含非标准内容的CSV文件,它的内容如下:
John, 001
01/01/2015, hamburger
02/01/2015, pizza
03/01/2015, ice cream
Mary, 002
01/01/2015, hamburger
02/01/2015, pizza
John, 003
04/01/2015, chocolate
现在,我想做的是用Java编写一个逻辑来分隔它们。我希望将“ John,001”作为标题,并将所有行放在John之下,再将Mary变成John的行。
这有可能吗?还是应该手动进行?
编辑:
对于输入,即使它不是标准化的,一个值得注意的模式是没有名称的行将始终以日期开头。
我的输出目标将是一个Java对象,最终可以将其以以下格式存储在数据库中。
Name, hamburger, pizza, ice cream, chocolate
John, 01/01/2015, 02/01/2015, 03/01/2015, NA
Mary, 01/01/2015, 02/01/2015, NA, NA
John, NA, NA, NA, 04/01/2015
您可以将文件读入列表
List<String> lines = Files.readAllLines(Paths.get(path), StandardCharsets.UTF_8);
然后遍历该列表,并将其拆分为所需的分隔符(",")
。
现在,您可以只使用if-else或switch块来检查特定条目。
List<DataObject> objects = new ArrayList<>();
DataObject dataObject = null;
for(String s : lines) {
String [] splitLine = s.split(",");
if(splitLine[0].matches("(\d{2}\/){2}\d{4}")) {
// We found a data
if(dataObject != null && splitLine.length == 2) {
String date = splitLine[0];
String dish = splitLine[1];
dataObject.add(date, dish);
} else {
// Handle error
}
} else if(splitLine.length == 2) {
// We can create a new data object
if(dataObject != null) {
objects.add(dataObject);
}
String name = splitLine[0];
String id = splitLine[1];
dataObject = new DataObject(name, id);
} else {
// Handle error
}
}
现在,您可以将它们分类为您的特定类别。
编辑:更改了循环,并添加了一个正则表达式(可能不是最佳的)来匹配日期字符串,并使用它们来决定是否将它们添加到最后一个数据对象中。
DataObject类可以包含保存日期/菜肴的数据结构。解析CSV后,您可以遍历对象List并执行所需的任何操作。我希望这个答案有帮助:)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句