我的输入字符串
1. An atomizer comprising liquid supply and an atomizing assembly detachably connected
2. The atomizer according to claim 1, wherein
3. The atomizer according to claim 1, wherein
4. Apparatus as claimed in any of the foregoing claims, wherein
5. Apparatus as claimed in claim 4, wherein
条件
没有1是其独立的父母
且没有2依赖于1
并且没有3依赖于1
并且没有4是独立的
且没有5依赖于4
我的输出应该如下命令
1
2
3
4
5
让我知道哪个数据结构最适合我的预期输出
截至目前,我已完成拆分依赖和独立,更多请提供解决方案
for (int i = 1; i < claimList.getLength(); i++) {
String dummy = claimList.item(i).getNodeValue();
Pattern pattern = Pattern.compile((".*\\bclaimed in claim\\b.*?"));
Matcher matcher = pattern.matcher(dummy);
Boolean isAvailable = matcher.find();
if (isAvailable) {
dependentClaims.add("\n" + claimList.item(i).getNodeValue());
} else {
independentClaims.add("\n" + claimList.item(i).getNodeValue());
}
}
答案 0 :(得分:1)
Map<Integer, Set<Integer>> claims = new TreeMap<>();
Pattern pattern = Pattern.compile(("\\bclaim\\s+(\\d+)", Pattern.CASE_INSENSITIVE));
// org.w3c.Node uses zero-based indices too.
for (int i = 0; i < claimList.getLenth(); i++) {
String text = claimList.item(i).getNodeValue();
int claimNo = i + 1;
// Or better take the claimno from the text:
claimNo = Integer.parseInt(text.replaceFirst("(?s)^(\\d*).*$", "0$1"), 10);
// (?s) matches dot `.` also with line breaks
// 0$1 ensures a number
if (claimNo == 0) {
continue;
}
claims.put(claimNo, new TreeSet());
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
int refClaimNo = Integer.parseInt(matcher.group(1));
if (!claims.containsKey(refClaimNo)) {
claims.put(claimNo, new TreeSet());
}
claims.get(refClaimNo).add(claimNo);
}
}
claims.entrySet().forEach((e) -> {
System.out.println(e.getKey());
e.getValue().forEach((c) -> {
System.out.println(" " + c);
});
});
这照顾了所列的指称对象(而不是反之亦然)。当然还有前向引用和多个引用。
在生产代码中,应确保将org.w3c.Element作为节点并获取其文本内容。索赔类等也可能是有意义的。
答案 1 :(得分:0)
您应该创建节点类,并为每个元素指定其后代。
class Node {
String value;
List<Node> descendants;
}