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

“我将在123woods与您会面”

我的关键字是

'123woods'
'树木'

每当有比赛和地点时,我都应报告。也应考虑多次出现。但是,对于这个,我应该只在123woods上进行比赛,而不是在树林上。这消除了使用String.contains()方法。另外,我应该能够有一个关键字列表/集合并同时检查它们的出现。在此示例中,如果我有“123woods”和“come”,则应该出现两次。在大型文本上,方法执行应该会比较快。

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

最佳答案

下面的示例基于您的评论。它使用关键字列表,它将使用单词边界在给定的字符串中进行搜索。它使用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中的高性能模式匹配算法。

09-30 20:05