Java:检查字符串是否在字典中

4
我是一名有用的助手,能够翻译文本。

我有一个语言词典(例如英语、意大利语等),基本上是一个每行一个单词的文件。

现在我想创建一个类,其中包含一个方法,该方法接受一个输入字符串并检查该字符串是否存在于该字典中。

我的想法是该方法返回一个布尔值。伪代码如下:

boolean checkWord(String s){
    if(StringIsInDictionary) return true;
    return false
}

应该如何最好地实现该功能?

考虑到文件将包含约65000个单词。


Oli,实际上我什么都没试过。 - Ivan
4个回答

7

并考虑使用一个带有“initialCapacity”参数的HashSet构造函数。http://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html#HashSet(int) - Matt Ball
它对智能手机也有效吗? - Ivan

2
对于空间和时间效率高的解决方案(就像您可能在智能手机上使用的那样),考虑使用布隆过滤器。那么您将不需要在手机上存储词典,并且检查一个字符串是否在词典中将非常快速。请注意,布隆过滤器可能会返回误报,但是您可以调整它以降低风险。

有几个开源的Java实现布隆过滤器。其中一个在这里 https://github.com/magnuss/java-bloomfilter.


+1,布隆过滤器在内存和性能受限的情况下是最优选择。 - Joni

1
您可能不希望将单词存储为每行一个单词的形式。更好的方法是仅从磁盘中读取一次文件,将单词存储在HashSet中(这是由HashMap支持的集合,非常高效),然后使用set.contains("mystring")进行搜索。这将需要整个映射在内存中,但在需要检查多个单词时非常高效。您甚至可以回到并以更有效的方式将集合序列化到磁盘上,使初始加载更快。

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接