Java 如何通过文件解析与生成的字符串匹配的字符串?

Java 如何通过文件解析与生成的字符串匹配的字符串?,java,file,Java,File,我的头衔不好,我通常不擅长做那些 我有一个程序,将生成输入单词的所有排列,它应该检查这些单词是否是单词(检查字典),并输出那些是单词。实际上,我只需要最后一部分,我不知道如何解析文件 我拿出了它(现在显示“stringwords=”),因为它确实让事情变得更糟(是一个if语句)。现在,它所要做的就是输出所有排列 编辑:我应该加上try/catch是在我尝试在列表中打开文件时添加的(与当前的字符串格式相反)。所以现在它什么也没做。 还有一件事:有没有可能(怎么可能)让排列显示比输入字符少的排列?很

我的头衔不好,我通常不擅长做那些

我有一个程序,将生成输入单词的所有排列,它应该检查这些单词是否是单词(检查字典),并输出那些是单词。实际上,我只需要最后一部分,我不知道如何解析文件

我拿出了它(现在显示“stringwords=”),因为它确实让事情变得更糟(是一个if语句)。现在,它所要做的就是输出所有排列

编辑:我应该加上try/catch是在我尝试在列表中打开文件时添加的(与当前的字符串格式相反)。所以现在它什么也没做。 还有一件事:有没有可能(怎么可能)让排列显示比输入字符少的排列?很抱歉措辞不好,比如如果我输入五个字符,显示所有五个字符的排列,以及四、三、二和一

import java.util.List;
import java.util.Scanner;
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import static java.lang.System.out;

public class Permutations
{
  public static void main(String[] args) throws Exception
  {
    out.println("Enter anything to get permutations: ");
    Scanner scan = new Scanner(System.in);
    String io = scan.nextLine();
    String str = io;
    StringBuffer strBuf = new StringBuffer(str);
    mutate(strBuf,str.length());
  }

  private static void mutate(StringBuffer str, int index)
  {
    try
    {
      String words = FileUtils.readFileToString(new File("wordsEn.txt"));

      if(index <= 0)
      {
        out.println(str);
      }

      else
      {
        mutate(str, index - 1);
        int currLoc = str.length()-index;
        for (int i = currLoc + 1; i < str.length(); i++)
        {
          change(str, currLoc, i);
          mutate(str, index - 1);
          change(str, i, currLoc);
        }
      }
    }
    catch(IOException e)
    {
      out.println("Your search found no results");
    }
  }
  private  static void change(StringBuffer str, int loc1, int loc2)
  {
    char t1 = str.charAt(loc1);
    str.setCharAt(loc1, str.charAt(loc2));
    str.setCharAt(loc2, t1);
  }
} 
import java.util.List;
导入java.util.Scanner;
导入java.io.BufferedReader;
导入java.io.File;
导入java.io.InputStreamReader;
导入java.io.IOException;
导入org.apache.commons.io.FileUtils;
导入静态java.lang.System.out;
公共类置换
{
公共静态void main(字符串[]args)引发异常
{
println(“输入任何东西以获得排列:”;
扫描仪扫描=新扫描仪(System.in);
字符串io=scan.nextLine();
字符串str=io;
StringBuffer strBuf=新的StringBuffer(str);
突变(strBuf,str.length());
}
私有静态void mutate(stringbufferstr,int-index)
{
尝试
{
stringwords=FileUtils.readFileToString(新文件(“wordsEn.txt”);

如果(index如果文件中的每个单词实际上位于不同的行上,您可以尝试以下方法:

BufferedReader br = new BufferedReader(new FileReader(file));  
String line = null;  
while ((line = br.readLine()) != null)  
{  
    ... // check and print here
} 
或者,如果您想尝试其他方法,Apache Commons IO库有一个名为
LineIterator
的工具

读卡器中对行的迭代器。 LineIterator保存对打开的读卡器的引用。使用完迭代器后,应关闭读卡器以释放内部资源。这可以通过直接关闭读卡器或调用迭代器上的close()或closequity(LineIterator)方法来完成

建议的使用模式是:


你的字典的格式是什么?@mok text file-如果这是你的意思。如果你的字典不是太大,你可以读取该文件并将单词放入某个数据结构中,然后进行检查。@JN11它大约有100000个单词,所以我认为它太大了。RE:你关于速度的编辑,这个问题可能很有趣:@JN11啊,对不起,我得走一段时间。它应该能工作,但到目前为止我所做的检查和打印都不起作用。
LineIterator it = FileUtils.lineIterator(file, "UTF-8");
    try {
        while (it.hasNext()) {
            String line = it.nextLine();
            // do something with line
        }
    } finally {
        it.close();
}