2014-10-12 59 views
0

因此,我正在编写一个拼字游戏建议程序,我决定这样做,因为我想学习集(不用担心,我至少得到了这个部分),并引用了程序中未创建的信息/数据。我对Java很熟悉(一般编程),但我想知道如何从单词列表中提取单词.FIC文件,以检查它们是否与输入字母生成的单词相对应。如何从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; 
} 
+1

什么是.FIC文件? (向我们展示一个示例文件,您的解析和搜索/匹配代码,您期望代码执行的内容以及实际执行的内容。) – 2014-10-12 01:03:15

+0

这只是一个单词列表,每行一个。只需要按行读取文件并将这些文字添加到散列映射或特里结构中以进行匹配。 – hobbs 2014-10-12 01:19:32

回答

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("_________________________________________________________________________"); 
    } 
} 

有几件事情:

  1. 的检验字方法检查该文件中的当前词是“字”生成的列表
  2. 的enterletters方法采用用户输入字母并将其返回字符串
  3. Words方法返回给定字符串中字符的所有可能组合的字符串集合,每个字符的使用次数与字符串中显示的次数相同没有重复“的字眼s“在返回的集合中。
  4. finalwordset和话(我会把他们的主要方法,但我很懒惰,也没关系针对这种情况)定义为实例变量字符串的ArrayList
  5. 我非常肯定有一个更好的/更有效的方式来做到这一点,但这至少起作用。

  6. 最后:我决定回答而不是删除,因为我没有在其他任何地方看到这个答案,所以如果您可以随意删除问题或链接到其他答案或任何其他内容,那么此时它是帮助其他人。