我的方法读取并打印文件,但我在将每个单词添加到ArrayList dict
时遇到问题。
读者一次读取一个字符的文件,所以我写的内容将每个字符添加到dict
:[c,a,t,d,o,g]当我想要[cat,dog] 。文本文件各有单词;我该如何区分它们呢?
到目前为止我的代码:
public static List Dictionary() {
ArrayList <String> dict = new ArrayList <String>();
File inFile = new File("C:/Users/Aidan/Desktop/fua.txt");
FileReader ins = null;
try {
ins = new FileReader(inFile);
int ch;
while ((ch = ins.read()) != -1) {
System.out.print((char) ch);
dict.add((char) ch + "");
}
} catch (Exception e) {
System.out.println(e);
} finally {
try {
ins.close();
} catch (Exception e) {
}
}
return dict;
}
答案 0 :(得分:0)
查看此处的答案,其中显示了如何使用扫描程序从文件中获取文字:Read next word in java。
您不想打印出单词,而是将它们附加到ArrayList。
答案 1 :(得分:0)
由于read
的{{1}}方法一次只能读取一个字符且不你想要什么,我建议你使用FileReader
来读取文件。
Scanner
答案 2 :(得分:0)
您可以将FileReader
包裹在BufferedReader
中,readLine()
具有readLine()
方法,可以一次为您提供整行(字)。当没有更多行要阅读时,null
会返回{{1}}。
答案 3 :(得分:0)
请遵守Java命名约定,因此readDictionary
代替Dictionary
(类似于类名)。接下来,我将fileName
传递给方法(而不是在方法中对路径进行硬编码)。我会使用Scanner
而不是重新发明轮子。您也可以在此使用try-with-resources
代替finally
(以及菱形运算符)。像,
public static List<String> readDictionary(String fileName) {
List<String> dict = new ArrayList<>();
try (Scanner scan = new Scanner(new File(fileName))) {
while (scan.hasNext()) {
dict.add(scan.next());
}
} catch (Exception e) {
System.out.printf("Caught Exception: %s%n", e.getMessage());
e.printStackTrace();
}
return dict;
}
或者,自己使用BufferedReader
和split
每个单词。像,
public static List<String> readDictionary(String fileName) {
List<String> dict = new ArrayList<>();
try (BufferedReader br = new BufferedReader(new FileReader(
new File(fileName)))) {
String line;
while ((line = br.readLine()) != null) {
if (!line.isEmpty()) {
Stream.of(line.split("\\s+"))
.forEachOrdered(word -> dict.add(word));
}
}
} catch (Exception e) {
System.out.printf("Caught Exception: %s%n", e.getMessage());
e.printStackTrace();
}
return dict;
}
但这基本上就是第一个例子。