你如何从java中的.FIC文件中提取数据?

时间:2014-10-12 01:01:52

标签: java

所以我正在写一个拼字游戏单词建议程序,我决定这样做,因为我想学习集合(不用担心,我至少得到那部分)并引用未在程序中创建的信息/数据。我对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 个答案:

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

一些事情:

  1. checkWords方法检查文件中的当前单词是否在生成的&#34;单词&#34;
  2. 列表中
  3. enterletters方法接受用户输入的字母并以字符串
  4. 返回
  5. Words方法返回一组字符串,其中包含给定字符串中所有字符的可能组合,每个字符的使用次数与字符串中出现的次数相同,并且不会重复&#34;单词&#34 ;在返回的集合中。
  6. finalwordset和单词是被定义为实例变量的字符串的arraylists(我会将它们放在main方法中但我懒惰,对于这种情况并不重要)
  7. 我非常确定有更好/更有效的方法来做到这一点,但这至少有效。

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