Java文字游戏查询

时间:2010-08-29 12:58:08

标签: java validation word implementation

我正在编写一个或多或少像文字游戏一样的小应用程序。 需要验证用户可以创建的单词以检查它是否是有效的英语单词。 我想到了一些实现这个的方法 - 1)有一个hashmap,每个英文单词作为键,布尔值作为值。这样我就可以在用户验证时搜索密钥等等。 2)向某个站点发送HTTP请求,例如dictionary.com,以验证该词是否存在。

虽然HTTP请求似乎是一种很好的实现方式,但我希望有一个最初填充的hashmap,然后定期从源更新,比如dictionary.com,这样我就可以避免了HTTP请求实现中涉及的延迟。

关于如何使用源中的单词填充hashmap的任何指针都将非常感激。

由于 p1nG

5 个答案:

答案 0 :(得分:1)

您可以使用网络服务和Big Huge同义词库。它是一个REST Web服务,因此您可能需要Jersey或RestEasy等工具。

另一种选择是Oanaware及其SOAP Web服务。


资源:

关于同一主题:

答案 1 :(得分:0)

我认为检查一个单词的哈希就不够了。两个单词可能有相同的哈希值。此外,随机字母序列可以具有与正确字相同的散列值。考虑到这两点,我认为你不会忘记检查你的单词(在字典中查找)。

我不确定填写词典的最佳方法是什么。尝试找到免费的字典软件,并检查他们的许可证说明他们使用的数据。我认为购买像this这样的东西会更容易。

如果这不是一个选项,我认为在线处理并不是一个糟糕的选择。

答案 2 :(得分:0)

下载单词列表怎么样?您可以使用WordNet http://wordnet.princeton.edu/wordnet/列出包含同义词的155,287个单词以及更多内容。

或谷歌搜索第一页上的“英语单词列表”等大量相关链接。

答案 3 :(得分:0)

如果您只想检查字典中是否存在单词,为什么不使用HashSet?您可以使用明文字典文件,每行包含一个单词,或者至少这是我过去所做的。

不确定更新它,但如果dictionary.com提供带有wordlistings的文件,您只需下载它,然后打开文件并将每个条目添加到您的哈希映射/集。假设不会删除任何单词,则只会覆盖现有条目。

编辑:刚刚写了一个测试编程,它应该证明在检查你的单词时,与hashmap或hash set的冲突不会有问题。

import java.util.HashSet;

public class CollidingHash {
    String value;
    public CollidingHash(String s){
        value=s;
    }
    @Override 
    public int hashCode(){
        return 1;
    }
    @Override 
    public boolean equals(Object o){
        if(! (o instanceof CollidingHash)){
            return false;
        }
        CollidingHash c2 = (CollidingHash)o;
        return value.equals(c2.value);
    }
    public static void main(String[] args) {
        HashSet<CollidingHash> dict = new HashSet<CollidingHash>();
        CollidingHash a = new CollidingHash("This");
        CollidingHash b = new CollidingHash("That");
        dict.add(a);
        System.out.println("Is "+ (dict.contains(b)? "Bad": "OK"));
    }   
}

Edit2:像Pace所提到的那样添加了equals方法。

答案 4 :(得分:0)

  

1)每个英语都有一个hashmap   word作为键,boolean作为值。   通过这种方式我可以搜索密钥   用户验证的时间等等。

HashMap对此任务来说太过分了。您只需知道某个单词是否存在,就可以使用HashSet。将所有字词添加到HashSet后,您可以使用contains()方法检查HashSet中是否存在单词。但是你必须意识到这是一种区分大小写的方法,所以你必须确保你的所有单词具有相同的大小写(例如,“hello”与“Hello”不匹配)。

另外,我不知道将整个英文字典加载到内存中的内存密集程度如何。如果遇到问题,每次需要检查单词是否存在时,更好的方法是扫描字典文件。

  

2)向某个站点发送HTTP请求   像dictionary.com来验证是否   字存在与否。

这也可行,但它依赖于(1)具有活动互联网连接的计算机和(2)dictionary.com网站正在运行。