我有一个写入文本文件的代码,然后打印出在文本文件中找到每个单词的次数。它工作正常,但不区分大小写。而且我被卡住了。你可以建议如何做到吗?
Map<String, Integer> map = new LinkedHashMap<>();
for (String w : data) {
Integer n = map.get(w.);
n = (n == null) ? 1 : ++n;
map.put(w, n);
}
System.out.println(map);
这是代码。 谢谢您的宝贵时间。
答案 0 :(得分:5)
正如其他人所说,在将条目放入地图之前,您需要小写(或大写)键。要计算字数,可以使用Map.merge
:
Map<String, Integer> frequencies = new LinkedHashMap<>();
data.forEach(w -> frequencies.merge(w.toLowerCase(), 1, Integer::sum);
或者,您也可以使用流:
Map<String, Long> frequencies = data.stream()
collect(Collectors.groupingBy(
String::toLowerCase,
Collectors.counting()));
答案 1 :(得分:3)
只需在.toLowerCase()
循环内将w
用于for
答案 2 :(得分:3)
您可以在放入地图时将字符串转换为小写。
Map<String, Integer> map = new LinkedHashMap<>();
for (String w : data) {
Integer n = map.get(w.toLowerCase());
n = (n == null) ? 1 : ++n;
map.put(w.toLowerCase(), n);
}
System.out.println(map);
答案 3 :(得分:1)
您可以使用Apache Commons Collections中的CaseInsensitiveMap。
其他人建议将键更改为小写字母,但 这可能不是一个选择 ,因为该程序的其他部分也可以访问地图并期望键能够保持原始格式。因此,您需要根据使用情况谨慎行事。