4

我有一本语言词典(即英语、意大利语等...),它本质上是一个文件,每一行都有一个单词。

现在我想用一个方法创建一个类,该方法在输入中给定一个字符串,检查该字符串是否存在于该字典中。

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

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

实现该功能的最佳方式应该是什么?

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

4

4 回答 4

7

将字典读成一个Set<String>(例如,HashSet<String>),然后使用set.contains(word).

于 2013-03-02T15:33:23.527 回答
2

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

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

于 2013-03-02T16:05:34.483 回答
1

您可能不想将单词存储为每行一个单词。更好的方法可能是只从磁盘读取文件一次,将单词存储在 HashSet(由 HashMap 支持的集合,搜索效率很高),然后使用set.contains("mystring"). 但是,这将要求整个地图都在内存中,但是当您需要检查多个单词时它会非常有效。

然后,您甚至可以返回并以更有效的方式将集合序列化到磁盘,从而加快初始加载速度。

于 2013-03-02T15:35:34.370 回答
1

看看这个问题,我想它可以帮助你。 使用java在文本文件中查找字符串的最快方法

于 2013-03-02T15:43:34.083 回答