首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java语言。在服务器上搜索输入文本中的单词。实现思路

Java语言。在服务器上搜索输入文本中的单词。实现思路
EN

Stack Overflow用户
提问于 2011-11-01 20:36:23
回答 3查看 229关注 0票数 2

例如,我有这样的情况:

在服务器上,我们有一个单词列表:

代码语言:javascript
复制
{'word1', 'word2', 'word3', 'word4'}

用户向服务器发送包含以下文本的请求:

代码语言:javascript
复制
"some text here word1. many many other text word4"

服务器必须处理此输入文本,从服务器列表中找到此文本中的所有单词,并标记此单词,然后将结果文本发送给用户:

代码语言:javascript
复制
"some text here <mark>word1<mark>. many many other text <mark>word4<mark>"

它是主要的思想,主要的概念。此时此刻,我必须实现这个逻辑。

所以,我请求你的帮助。

对我来说,定义技术和工具是必要的。

你可以推荐什么工具来完成这项任务?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-01 20:42:48

以下是一个简单的解决方案:

代码语言:javascript
复制
for (String word : words) {
    text = text.replaceAll(word, "<mark>" +word + "</mark>");
}

更好的解决方案应该使用正则表达式,以避免替换单词片段,例如wo<mark>man</mark>。您应该像"\\b" + word + "\\b"一样创建正则表达式。

但我建议你看看像Solr (或Lucine)这样的可供使用的引擎。

票数 2
EN

Stack Overflow用户

发布于 2011-11-01 20:43:45

有许多悬而未决的问题,比如到底是什么界定了“单词”。例如,您希望在“全文”中突出显示"full“吗?

  1. 然而,这里有一个非常简单的想法:
  2. 将服务器的单词收集到一个HashSet中,
  3. 解析每个请求,即根据你想要的分隔符来识别单词。(线性)对于HashMap中的每个标记/单词检查成员身份(O(1))
  4. 将单词或包含标记标记的单词写入输出。

顺便说一下: Lucene、Solr等在这里不会有太多帮助。当然,您可以使用它们,但这是没有意义的。他们的长处在于建立了一个text的索引。文本可能意味着大量的数据。一组单词受该语言的字典的限制。对于计算机来说,这通常是一个关于大小的笑话。一个简单的HashSet应该可以满足您的需求。

票数 2
EN

Stack Overflow用户

发布于 2011-11-01 20:53:39

实现这一点的最简单方法是使用String.replaceAll。您可以将所有关键字组合到一个正则表达式中,并使用反向引用来包含原始单词。如果关键字包含正则表达式运算符,则必须对其进行转义。

在循环中调用String.replaceAll通常是错误的,因为中间结果可能包含不在输入中的匹配。作为一个人为的例子,假设我想用"b“替换"ab”,用"c“替换"bb”。因此,"bab“的正确输出应该是"bb”。然而,"bab".replaceAll("ab","b").replaceAll("bb","c")是"c“。出于同样的原因,您不希望在循环中使用String.replace,尽管这似乎是完成手头任务的最简单方法。

如果您需要比这更高的性能,第一步将是提前编译正则表达式。如果你需要更多,这里有一些非常有趣的关于字符串搜索的研究论文。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7966553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档