我正在尝试解析两个文本文件。我想要做的是在一个日志中找到一个特定的关键字,看看下一个日志是否有相同的关键字。
日志包含由标记值对组成的行,如下所示:LOG 1的行数多于LOG 2
log 1
32=A 9=value 39=value2 10=value3xyz D=339 Z=abcdef
32=A 100=value 10=randomvalue 109=randomvalue2 376=435014 528=A
log 2
9=value 39=value2 22=value3xyz D=339 Z=abcdef
100=value 22=blahblah 109=randomvalue2 376=435014 528=A
大约有20,000行看起来与此相似。
基本上我要做的是找到日志1中所有“11 =”标签的值,如value3xyz和randomvalue,然后搜索log 2并查看标签“22 =”是否具有任何值标签11有。
我希望能够打印出像这样的东西
Log 1:
Line: 9=value 39=value2 10=value3xyz D=339 Z=abcdef
Log 2:
Line: 9=value3 39=value12 22=value3xyz D=3349 Z=abcdefda
Log 1:
Line: 100=value 10=randomvalue 109=randomvalue2 376=435014 528=A
Log 2:
Not found
这就是我所拥有的:
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.ArrayList;
public class FileData {
public static void main(String[] args) throws IOException {
FileInputStream log1Stream = new FileInputStream("src/txtfiles/log1.txt");
FileInputStream log2Stream = new FileInputStream("src/txtfiles/log2.txt");
BufferedReader log1Reader = new BufferedReader(new InputStreamReader(log1Stream));
BufferedReader log2Reader = new BufferedReader(new InputStreamReader(log2Stream));
ArrayList<String> parentTagValue = new ArrayList<String>();
ArrayList<String> childTagValue = new ArrayList<String>();
ArrayList<String> hasChild = new ArrayList<String>();
ArrayList<String> noChild = new ArrayList<String>();
String upstream;
String downstream;
String strLine;
// put all of the "10=" tag values into an arraylist
while ((strLine = log1Reader.readLine()) != null) {
if (strLine.contains("32=A")) {
parentTagValue.add((strLine.substring(strLine.lastIndexOf(" 10=") + 4).replaceAll(" .+$", "")));
}
}
// put all of the "22=" tag values into an arraylist
while ((strLine = log2Reader.readLine()) != null) {
if (strLine.contains("22=")) {
childTagValue.add(strLine.substring(strLine.lastIndexOf(" 22=") + 4).replaceAll(" .+$", ""));
}
}
// see which "10=" tag values have a "child value" in log 2
for (String string : parentTagValue) {
if (childTagValue.contains(string)) {
hasChild.add(string);
}
else {
noChild.add(string);
}
}
log1Reader.close();
log2Reader.close();
System.out.println(noChild.size()+hasChild.size());
}
}
我不确定如何打印日志中的行以显示我想在上面显示的信息。有人可以指出我正确的方向。此外,还有更好/更有效的方法吗?