我不明白我在这里做错了什么。
说明如下:
在此项目中,您将阅读文本文件。对于每个新认识的单词,它都是 输入索引及其发生的行。对于之前的任何单词 被识别,它发生的行将进入索引。
因为这些词很常见,所以包含三(3)个或更少字符的任何单词都是 被忽略。同样,标点符号和大写也应该被忽略。 连字符被视为单个单词而不连字符。例如,'偷听' 和'偷听'是一样的。
单词可能有意或无意地有多个标点符号。从而, '相等。','相等......','相等。,。,。'和'。,。;相等'都是同一个词 - '相等'。 输入用尽后,单词索引及其行位置应为 按字母顺序打印。
import java.util.*;
import java.io.*;
public class Proj5 {
public static void main(String[] args) throws FileNotFoundException {
Map<String, ArrayList<Integer>> occurrence = new HashMap<>();
Scanner scan = new Scanner(new FileReader("words.txt"));
for (int lineNum = 1; scan.hasNextLine(); lineNum++) {
String line = scan.nextLine();
String[] words = line.replaceAll("[^a-zA-Z ]", "").toLowerCase().split("\\s+");
for (String word : words) {
if (word.length() >= 4) {
word = word.toLowerCase();
ArrayList<Integer> list = occurrence.get(word);
if (list == null) {
list = new ArrayList<>();
occurrence.put(word, list);
}
if (!list.contains(lineNum)) {
list.add(lineNum);
}
}
}
}
List<String> words = new ArrayList<>();
words.addAll(occurrence.keySet());
Collections.sort(words);
words.stream().forEach((word) -> {
System.out.println(word + " - " + occurrence.remove(word));
});
}
}
是的,我的目录中有一个words.txt。