Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java字谜解算器_Java_String_Dictionary_Solver_Anagram - Fatal编程技术网

Java字谜解算器

Java字谜解算器,java,string,dictionary,solver,anagram,Java,String,Dictionary,Solver,Anagram,我可以想出如何创建字符串的字谜,但我不知道如何将它们与真实单词词典进行比较,以检查字谜是否是真实单词。Java API中是否有包含整个英语词典的类?否,您必须使用外部库,例如,它是WordNet的包装器,WordNet是一个按含义组织的机器可读词汇数据库,它包含了几乎所有的英语单词。也许中的英语词典可以帮助您。标准Java库中没有这样的专门类,但是您可以使用任何您喜欢的接口实现,并通过加载您选择的单词来初始化它,你可以在许多地方找到无数个应用程序中的任意一个(只需仔细检查你选择的单词列表的许可证

我可以想出如何创建字符串的字谜,但我不知道如何将它们与真实单词词典进行比较,以检查字谜是否是真实单词。Java API中是否有包含整个英语词典的类?

否,您必须使用外部库,例如,它是WordNet的包装器,WordNet是一个按含义组织的机器可读词汇数据库,它包含了几乎所有的英语单词。

也许中的英语词典可以帮助您。

标准Java库中没有这样的专门类,但是您可以使用任何您喜欢的接口实现,并通过加载您选择的单词来初始化它,你可以在许多地方找到无数个应用程序中的任意一个(只需仔细检查你选择的单词列表的许可证是否与你的预期应用程序兼容,例如,它是否允许商业使用,如果你需要的话,它是否允许闭源应用程序,等等)。

否,但你可以从中获得单词列表。从那里,您可以将单词列表文件读入列表:

List<String> lines = new ArrayList<String>();
BufferedReader in = new BufferedReader(new FileReader("wordlist.txt"));
String line = null;
while (null!=(line=in.readLine()))
{
   lines.add(line);
}
in.close();
List line=new ArrayList();
BufferedReader in=新的BufferedReader(新的文件阅读器(“wordlist.txt”);
字符串行=null;
while(null!=(line=in.readLine())
{
行。添加(行);
}
in.close();

最后,二进制搜索对候选单词使用
行.contains()

确定一组字符是否为单词的字谜的一种方法是使用素数。给每个字母分配一个素数,例如,a=2,b=3,c=5,d=7。现在预计算字典中每个单词的素数乘积。例如,'add'=2*7*7=98,或'bad'=3*2*7=42


现在,可以通过计算字母集的值来确定字母集是否是字典中任何单词的字谜。例如,字母'abd'=2*3*7=42='bad'。只需检查预计算字典中是否存在字母的计算值。对于任何字谜,您只需要进行一次计算,而不是试图生成所有可能的字谜。但是请注意,这种方法只适用于相对较小的单词,否则会遇到溢出问题,需要使用biginger。

Set
实现(如
HashSet
可以更快时,没有理由使用
O(logn)
二进制搜索。超级好的观点Alex Martelli。我不知道我在想什么。需要咖啡。我不熟悉JWNL,但是“含义”数据会不会给真正只需要简单单词列表的应用程序增加不必要的容量?