我正在编写一个或多或少像文字游戏一样的小应用程序。 需要验证用户可以创建的单词以检查它是否是有效的英语单词。 我想到了一些实现这个的方法 - 1)有一个hashmap,每个英文单词作为键,布尔值作为值。这样我就可以在用户验证时搜索密钥等等。 2)向某个站点发送HTTP请求,例如dictionary.com,以验证该词是否存在。
虽然HTTP请求似乎是一种很好的实现方式,但我希望有一个最初填充的hashmap,然后定期从源更新,比如dictionary.com,这样我就可以避免了HTTP请求实现中涉及的延迟。
关于如何使用源中的单词填充hashmap的任何指针都将非常感激。
由于 p1nG
答案 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网站正在运行。