我有一个txt文档,其中每一行都是独立的消息。这可能包括姓名,出生日期,地址等。除地址外,所有其他信息都位于一行中。他们的顺序不固定。名称和生日必须可用,其他信息可能不可用。如果没有名字或生日,则此人应被忽略。不同的人使用空白行来区分它们。我想阅读这些信息并将其放入arraylist,但是我不知道如何编写代码。
我最初的想法是使用循环读取内容并将其存储,如果有空白行,则开始保存其他内容。但是我不知道如何具体实现代码。
public class InforProcessor {
private File recordFile;
private File instructionFile;
private File outputFile;
private InforList inforlist;
public InforProcessor(String[]s)
{
recordFile = new File(s[0]);
instructionFile = new File(s[1]);
outputFile = new File(s[2]);
inforlist = new InforList();
}
}
这是我现有的代码,我想读取recordFile的内容并写入arraylist。
输入文件如下:
name john
birthday 11-11-2015
Address 11 Harry St, montain, TRY
birthday 12-25-2017
name peter
Postcode 2005
name jane
birthday 25-19-1998
Address 25 jeoje St, Sky, FLY
Postcode 1998
name geoge
输出信息或有用信息应为:
name john
birthday 11-11-2015
Address 11 Harry St, montain, TRY
birthday 12-25-2017
name peter
Postcode 2005
name jane
birthday 25-19-1998
Address 25 jeoje St, Sky, FLY
应该删除最后一个信息,因为它没有生日。
答案 0 :(得分:0)
首先,您需要从文件中读取所有行,并且每条消息都由空行分隔。
第二,反复检查消息并检查消息是否有效,如果消息有效,则将消息添加到列表中。
private static List<String> filterFile(final String input) throws Exception {
List<String> result = new ArrayList<>();
List<String> lines = FileUtils.readLines(new File(input), "UTF-8");
System.out.println(lines.size());
int begin = 0;
int end = 0;
for (; end < lines.size(); end++) {
if (Strings.isNullOrEmpty(lines.get(end))) {
if (isValidInfo(lines, begin, end)) {
result.addAll(lines.subList(begin, end + 1));
}
begin = end + 1;
}
}
return result;
}
如果消息中有名字和生日,则是我们想要的消息。
private static boolean isValidInfo(List<String> infos, int begin, int end) {
int counts = 0;
for (int i = begin; i < end; i++) {
String line = infos.get(i);
if (line.startsWith("name")) {
counts++;
}
if (line.startsWith("birthday")) {
counts++;
}
}
return counts == 2;
}