【发布时间】:2018-01-24 11:02:07
【问题描述】:
我有这段代码可以读取并计算 txt 文件中的每个单词,但是我只希望它对一行中的每个单词进行一次计数,所以我正在尝试创建一个 HashSet 但是我在转换ArrayList 到 HashSet。这是我的代码:
try {
List<String> list = new ArrayList<String>();
int totalWords = 0;
int uniqueWords = 0;
File fr = new File("filename.txt");
Scanner sc = new Scanner(fr);
while (sc.hasNext()) {
String words = sc.next();
String[] space = words.split(" ");
Set<String> set = new HashSet<String>(Arrays.asList(space));
for (int i = 0; i < set.length; i++) {
list.add(set[i]);
}
totalWords++;
}
System.out.println("Words with their frequency..");
Set<String> uniqueSet = new HashSet<String>(list);
for (String word : uniqueSet) {
System.out.println(word + ": " + Collections.frequency(list,word));
}
} catch (Exception e) {
System.out.println("File not found");
}
如果有人可以帮助解释为什么长度“无法解析或不是字段”,以及为什么我在“set[i]”上出现错误,告诉我它必须解析为字符串。谢谢你
【问题讨论】:
-
记住 Java 不支持运算符重载。你不能在任何非数组对象上使用
[]。 -
使用 for in range 循环遍历集合的每个元素。
-
如果文件在不同的行中多次包含相同的单词,应该多久计算一次?
-
@XtremeBaumer 例如,如果单词“dog”在第 1 行出现两次,在第 2 行出现一次,则应该只计算两次,因为它出现在两行。
-
所以你根本不关心第三次出现而忽略它(不在任何地方计算)?