我正在为我的计算机科学课的最终作业编写Word Search Generator程序。
我创建了一个名为“单词”的文本文件,该文件包含10个单词,分别代表字母表中的26个字母。我指的是通过读取文本文件并将其存储在数组列表中。
我已经使用了在这里获得的反馈并进行了一些更改。我已经定义了fileName
是什么,并且已经插入了文本文件的确切位置。
这是我更新的代码:
public static List<String> readWords () throws IOException {
String fileName = ("C:\\Users\\Dell\\workspace\\Final Summative\\src\\Words.txt");
int maxLength = Math.max(rows, cols);
List<String> words = new ArrayList<>(); // The words from the Words text file will be stored in this array list
try (Scanner sc = new Scanner(new FileReader(fileName))) {
while (sc.hasNextLine()) {
String s = sc.next().trim().toLowerCase();
if (s.matches("^[a-z]{3," + maxLength + "}$")) { // We will pick only words with length = 3 and max. length, and [a-z] inside
words.add(s.toUpperCase());
}//end of if
}//end of while loop
} catch (IOException e) {
// Manage the error!
e.printStackTrace();
}//end of catch
return words;
}//end of readWords(fileName)
我现在运行代码时得到FileNotFoundException
。我已经仔细检查了我的文本文件是否在正确的文件夹中,但是仍然出现此错误。它说:
java.io.FileNotFoundException: C:\Users\Dell\workspace\Final Summative\src\Words.txt (The system cannot find the file specified)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileReader.<init>(Unknown Source)
at WordSearch.readWords(WordSearch.java:76)
答案 0 :(得分:0)
首先,您没有在s.matches("^[a-z]{3," + maxLength + "]$"
中正确地将括号{}括起来。
而且很可能没有正确给出文件名。
检查是否类似:readWords("C:/Users/Username/Desktop/words.txt")
,以防文本文件位于桌面上。
答案 1 :(得分:0)
如果您真正需要做的就是读取文件中的所有行,则Java的更现代版本中有一个快捷方式:Files.lines
。
实际上,如果您有一个匹配单词的模式,则可以使用Matcher.results
和MatchResult.group
一次完成所有操作:
Files.lines(path)
.map(pattern::matcher)
.flatMap(Matcher::results)
.map(MatchResult::group)
.collect(Collector.toList());
但是我不确定您是否已经研究了流或允许使用哪些库。
请注意,尽管这里收集到一个列表(假设您不需要了解重复项)或地图(如果对单词的使用)。