实际上,我构建了一个 Java 代码来解析以下文本文件:
(FAMIX.Attribute (id: 22)
(name 'obj_I')
(parentType (ref: 11))
(declaredType (ref: 27))
(isPrivate true)
)
(FAMIX.Attribute (id: 38)
(name 'obj_k')
(parentType (ref: 34))
(declaredType (ref: 43))
(isPrivate true)
)
(FAMIX.Attribute (id: 56)
(name 'obj_K')
(parentType (ref: 46))
(declaredType (ref: 43))
(isPrivate true)
)
(FAMIX.Attribute (id: 73)
(name 'obj_L')
(parentType (ref: 64))
(declaredType (ref: 45))
(isPrivate true)
)
(FAMIX.Attribute (id: 67)
(name 'obj_G')
(parentType (ref: 64))
(declaredType (ref: 46))
(isPrivate true)
)
(FAMIX.Attribute (id: 93)
(name 'classD')
(parentType (ref: 85))
(declaredType (ref: 94))
(isPrivate true)
)
(FAMIX.Attribute (id: 99)
(name 'classC')
(parentType (ref: 86))
(declaredType(ref: 86))
(isPackage true)
)
(FAMIX.Attribute (id: 114)
(name 'classB')
(parentType (ref: 94))
(declaredType (ref: 11))
(isPrivate true)
)
(FAMIX.Attribute (id: 107)
(name 'obj_c')
(parentType (ref: 94))
(declaredType (ref: 86))
(isPrivate true)
)
Java 代码:
// Find Attributes
Pattern p111 = Pattern.compile("FAMIX.Attribute");
Matcher m111 = p111.matcher(line);
while (m111.find()) {
FAMIXAttribute obj = new FAMIXAttribute();
Pattern p222 = Pattern.compile("id:\\s*([0-9]+)");
Matcher m222 = p222.matcher(line);
while (m222.find()) {
System.out.print(m222.group(1));
}
while ((line = br.readLine()) != null && !(line.contains("FAMIX"))) {
Pattern p333 = Pattern.compile("name\\s*'([\\w]+)\\s*'");
Matcher m333 = p333.matcher(line);
while (m333.find()) {
System.out.print(m333.group(1));
}
Pattern p555 = Pattern.compile("parentType\\s*\\(ref:\\s*([0-9]+)\\)");
Matcher m555 = p555.matcher(line);
while (m555.find()) {
System.out.print(m555.group(1));
}
Pattern p666 = Pattern.compile("declaredType\\s*\\(ref:\\s*([0-9]+)\\)");
Matcher m666 = p666.matcher(line);
while (m666.find()) {
System.out.print(m666.group(1));
}
}
} // exit from finding Attribute
输出:
***************** Attributes *****************
obj_k 38 34 43
obj_L 73 64 45
classD 93 85 94
classB 114 94 11
根据输出,问题是解析器跳过一些输出(跳转)
如果问题不清楚,请告诉我,我会尽力进一步澄清。