如何在另一个字符串的末尾找到带有额外单词的不同字符串?

时间:2014-04-04 14:48:33

标签: java string

我正在尝试根据词汇表列表检查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.

1 个答案:

答案 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);
    }
});