【发布时间】:2014-04-16 17:15:50
【问题描述】:
我的标题不好,我通常不擅长制作这些。
我有一个程序,它将生成输入单词的所有排列,并且应该检查这些是否是单词(检查字典),并输出那些是单词。真的,我只需要最后一部分,我不知道如何解析文件。
我取出了那里的东西(现在显示“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);
}
}
【问题讨论】:
-
你的字典是什么格式的?
-
@mok 文本文件 - 如果这就是你的意思。
-
如果您的字典不是太大,您可以阅读文件并将单词放入某种数据结构中并以这种方式检查。
-
@JN11 它有大约 100,000 个单词,所以我认为它太大了。