【发布时间】:2017-04-05 19:02:00
【问题描述】:
我需要读取用户输入并将其与dictionary.txt. 进行比较。用户可以输入任意数量的字符,并且程序必须返回可以由这些字符组成的所有英文单词。这些字母可以按任何顺序使用,并且只能使用一次。
例如:
用户输入:“odg”
输出: "dog" , "god" ... 和任何其他
经过大量研究,我想出了以下部分解决方案:
- 读取用户输入
- 转换为字符数组
- 根据数组长度循环遍历文档
- 使用 indexOf 将该数组中的每个字符与每一行进行比较,然后打印不返回
-1的单词/s
如何将用户输入的一组字符与文本文件(字典)中的字符进行比较?字符不必按任何顺序匹配。(如上面使用的示例所示)
请耐心等待,我知道这一定是完成此类任务的最低效的方法之一!任何关于如何实现我的原始想法的进一步想法将不胜感激,同时我也愿意接受任何新的和更有效的方法来执行此操作。
以下是我到目前为止的想法:
public static void main(String[] args) throws FileNotFoundException {
BufferedReader reader1 = new BufferedReader(new FileReader(FILENAME));
Scanner sc = new Scanner(System.in);
String line;
ArrayList<String> match = new ArrayList<>();
System.out.println("Enter characters to see which english words match: ");
String userInput = sc.next();
char arr[] = userInput.toCharArray();
int i;
try {
while ((line = reader1.readLine()) != null) {
for (i=0; i < arr.length; i++)
{
if ((line.indexOf(userInput.charAt(i)) != -1) && (line.length() == arr.length)) {
match.add(line);
}
else {
// System.out.println("no matches");
}
}
}
System.out.println(match);
}
catch (IOException e) {
e.printStackTrace();
}
**当前结果:**
文本文件中的单词:
cab
dog
god
back
dogs
quick
用户输入:“odg”
程序输出:
[god, god, god, dog, dog, dog]
程序应该返回字典中可以由用户输入的字符串组成的所有单词在这种情况下,我设法返回两个实例,但是,每个实例都显示了 3 次(arr.length)。
【问题讨论】:
-
您的问题是什么?您的代码有什么具体问题? 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。
-
您的问题是“如何检查是否可以从其他单词中的字符创建单词”?如果是,请查看Check if letters that a word consists of are present in another string
-
无论如何,您应该尝试在代码中分离特定任务。例如,您可以创建方法
boolean test(characters, word),您将在其中进行验证。如果结果为真,那么您可以打印单词。目前您正在为每个字母验证打印它,而不是整个过程。 -
我同意@Pshemo - 你应该使用分而治之。也就是说,创建一个方法来检查两个字符串的字符是否匹配(根据您的条件)。这还有一个优点,即您基本上可以将显示的代码减少为仅显示该方法的代码(尽管上面的代码足够短,恕我直言)。还有一个问题:在第 3 点中,您说您想根据数组长度比较字符串。我在你的代码中没有看到?
标签: java string dictionary char