我有一个语言词典(即英语,意大利语等),基本上是一个每行都有一个单词的文件。
现在我想创建一个类,该方法在输入中给出一个字符串,检查该字符串是否存在于该字典中。
我的想法是该方法返回一个布尔值。在伪代码中:
boolean checkWord(String s){
if(StringIsInDictionary) return true;
return false
}
实施该功能的最佳方法是什么?
考虑该文件将包含~65000个单词。
答案 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