所以我正在写一个拼字游戏单词建议程序,我决定这样做,因为我想学习集合(不用担心,我至少得到那部分)并引用未在程序中创建的信息/数据。我对Java(以及一般的编程)很陌生,但我想知道如何从单词列表.FIC文件中提取单词以便根据输入的字母生成的单词进行检查。
为了澄清,我编写了一个程序,它接受一系列字母并返回一组从这些字母创建的每个可能的单词。例如: 输入:
abc
会给出一个包含“单词”的集合:
a, ab, ac, abc, acb, b, ba, bc, bac, bca, c, ca, cb, cab, cba
我要问的是,如何检查这些内容以查找.FIC文件中包含的内容。
该文件是Moby project word list中的“官方填字游戏”文件,我在解析和其他文件处理方法方面仍然非常不稳定。我正在继续研究,所以我没有任何原型代码。
很抱歉,如果问题不完全清楚。
编辑:这是让“单词”更容易理解这个想法的方法。我不明白的部分具体是如何从.FIC文件中提取单词(作为字符串)。
private static Set<String> Words(String s)
{
Set<String> tempwords = new TreeSet<String>();
if (s.length() == 1)
{ // base case, last letter
tempwords.add(s);
// System.out.println(s); uncomment when debugging
}
else
{
//set up to add each letter in s
for (int i = 0; i < s.length(); i++)
{ //cut the i letter out of the string
String remaining = s.substring(0, i) + s.substring(i+1);
//recursion to add all combinations of letters onto the current letter/"word"
for (String permutation : Words(remaining))
{
// System.out.println(s.substring(i, i+1) + permutation); uncomment when debugging
//add the full length words
tempwords.add(s.substring(i, i+1) + permutation);
// System.out.println(permutation); uncomment when debugging
//add the not-full-length words
tempwords.add(permutation);
}
}
}
// System.out.println(tempwords); uncomment when debugging
return tempwords;
}
答案 0 :(得分:0)
我不知道它是否是最好的解决方案,但我想出来了(hobbs线路的东西帮了很多,谢谢)。我发现这有效:
public static void main(String[] args) throws FileNotFoundException
{
Scanner s = new Scanner(new FileReader("C:/Users/Sean/workspace/Imbored/bin/113809of.fic"));
while(true)
{
words.clear();
String letters = enterLetters();
words.addAll(Words(letters));
while(s.hasNextLine()) {
String line = s.nextLine();
String finalword = checkWords(line, words);
if (finalword != null) finalwordset.add(finalword);
}
s.reset();
System.out.println(finalwordset);
System.out.println();
System.out.println("_________________________________________________________________________");
}
}
一些事情:
我非常确定有更好/更有效的方法来做到这一点,但这至少有效。
最后:我决定回答而不是删除,因为我没有在其他任何地方看到这个回答,所以如果它可以随意删除问题或链接到其他答案或其他什么,此时它是为了帮助其他人。