我正在尝试根据词汇表列表检查java字符串,如果它找到词汇表列表中存在的术语,则使用标记包装该术语。 但问题是,如果我在词汇表列表中有两个术语,如: " Sprint公司" " Sprint 0"然后代码只选择Sprint术语,它忽略了" Sprint 0"。
这是我的代码
private String findGlassayTerms(String response, List<Glossary> glossary) {
for (Glossary item : glossary) {
// check if response contains the term
if (StringUtils.contains(response, item.getTerm())) {
System.out.println(item.getTerm());
response = StringUtils.replace(response, item.getTerm(), "<span class=" + item.getTerm() + ">" + item.getTerm() + "</span>");
}
}
return response;
}
结果如下:
<span class=Sprint>Sprint</span> 0 is typically a one or two week period at the end of the Define phase. <br>In summary, <span class=Sprint>Sprint</span> 0 provides an opportunity.
答案 0 :(得分:1)
如果按期限长度(最长期限)排序List<Glossary> glossary
,则您当前的代码应该可以正常运行。另一个解决方案是建立一个所有匹配的列表,然后循环遍历那些&#34;得分&#34;正确的匹配。接下来,我认为您应该将方法重命名为findGlossaryTerms
(而不是findGlassayTerms
)。最后,那种(在代码中)可能是这样的 -
Collections.sort(glossary, new Comparator<Glossary>() {
public int compare(Glossary a, Glossary b) {
if (a == null) {
if (b == null) {
return 0;
}
return -1;
} else if (b == null) {
return 1;
}
int av = (a.getTerm() != null) ? a.getTerm().length() : 0;
int bv = (b.getTerm() != null) ? b.getTerm().length() : 0;
return Integer.valueOf(bv).compareTo(av);
}
});