Java 中不区分大小写的地图
Case Insensitive map in Java
我有一个代码可以写入一个文本文件,然后打印出文本文件中的每个单词被找到的次数。它工作正常,但需要不区分大小写。我卡住了。你能建议一下怎么做吗?
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);
这是代码。
谢谢你的时间。
您可以使用 Apache Commons Collections 中的 CaseInsensitiveMap。
其他人建议将键更改为小写,但这可能不是一个选项,因为程序的其他部分也可以访问到地图并期望键是它们的原始格式。因此,您需要根据用例谨慎行事。
只需在 for
循环中将 .toLowerCase()
用于 w
您可以在放入地图时将字符串转换为小写。
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);
正如其他人所说,在将条目放入地图之前,您需要将键小写(或大写)。对于计算单词,您可以使用 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()));
我有一个代码可以写入一个文本文件,然后打印出文本文件中的每个单词被找到的次数。它工作正常,但需要不区分大小写。我卡住了。你能建议一下怎么做吗?
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);
这是代码。 谢谢你的时间。
您可以使用 Apache Commons Collections 中的 CaseInsensitiveMap。
其他人建议将键更改为小写,但这可能不是一个选项,因为程序的其他部分也可以访问到地图并期望键是它们的原始格式。因此,您需要根据用例谨慎行事。
只需在 for
循环中将 .toLowerCase()
用于 w
您可以在放入地图时将字符串转换为小写。
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);
正如其他人所说,在将条目放入地图之前,您需要将键小写(或大写)。对于计算单词,您可以使用 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()));