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

时间:2013-03-02 15:31:40

标签: java algorithm dictionary

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

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

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

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

实施该功能的最佳方法是什么?

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

4 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:2)

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

有几个开源过滤器的开源Java实现。一个是https://github.com/magnuss/java-bloomfilter

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

看看这个问题,我认为它可以帮到你。 Fastest way to find a string in a text file with java