如何在Java中的字符串中找到整个单词?

我有一个字符串,我必须解析不同的关键字。例如,我有字符串:

“我会来123伍兹见你”

我的关键词是

“123伍兹”
“树林”

我应该在比赛时间和地点报告。还应考虑多次发生的情况。

但是,对于这个,我应该只在“123woods”上获得匹配,而不是在“woods”上。这消除了使用方法。另外,我应该能够有一个列表/一组关键字,并同时检查它们的发生。在这个例子中,如果我有“123woods”“come”,我应该得到两个出现。在大型文本上,方法执行应该有点快。String.contains()

我的想法是使用,但我不确定它是否会表现良好。有什么建议吗?StringTokenizer


答案 1

以下示例基于您的评论。它使用关键字列表,将使用单词边界在给定的字符串中搜索该列表。它使用Apache Commons Lang的StringUtils来构建正则表达式并打印匹配的组。

String text = "I will come and meet you at the woods 123woods and all the woods";

List<String> tokens = new ArrayList<String>();
tokens.add("123woods");
tokens.add("woods");

String patternString = "\\b(" + StringUtils.join(tokens, "|") + ")\\b";
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(text);

while (matcher.find()) {
    System.out.println(matcher.group(1));
}

如果你正在寻找更高的性能,你可以看看StringSearch:Java中的高性能模式匹配算法。


答案 2

使用正则表达式+单词边界,因为其他人回答。

"I will come and meet you at the 123woods".matches(".*\\b123woods\\b.*");

将是真的。

"I will come and meet you at the 123woods".matches(".*\\bwoods\\b.*");

将是假的。