我对标题不好,我通常不擅长制作这些。
我有一个程序,它将生成输入单词的所有排列,并且应该检查它们是否是单词(检查字典),并输出那些单词。真的,我只需要最后一部分,我无法弄清楚如何解析文件。
我拿出那里的东西(现在显示“String words =”),因为它确实让事情变得更糟(是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);
}
}
答案 0 :(得分:1)
如果文件中的每个单词实际上都在不同的行上,也许你可以试试这个:
BufferedReader br = new BufferedReader(new FileReader(file));
String line = null;
while ((line = br.readLine()) != null)
{
... // check and print here
}
或者如果您想尝试别的东西,Apache Commons IO库会有一些名为LineIterator
的东西。
读者中的线路上的迭代器。 LineIterator包含对打开的Reader的引用。完成迭代器后,应关闭阅读器以释放内部资源。这可以通过直接关闭阅读器,或通过调用迭代器上的close()或closeQuietly(LineIterator)方法来完成。
推荐的使用模式是:
LineIterator it = FileUtils.lineIterator(file, "UTF-8");
try {
while (it.hasNext()) {
String line = it.nextLine();
// do something with line
}
} finally {
it.close();
}