【问题标题】:Java: Check if a string is in a dictionaryJava:检查字符串是否在字典中
【发布时间】:2013-03-02 15:31:39
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 奥利其实我什么都没试过。

标签: java algorithm dictionary


【解决方案1】:

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

【讨论】:

【解决方案2】:

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

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

【讨论】:

  • +1,Bloom 过滤器最适合内存和性能受限的情况。
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-20
      • 2013-03-04
      • 1970-01-01
      • 2014-07-29
      • 2021-10-04
      • 1970-01-01
      • 2015-11-12
      相关资源
      最近更新 更多