繁体   English   中英

Java中不区分大小写的映射

Case Insensitive map in Java

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有一个写入文本文件的代码,然后打印出在文本文件中找到每个单词的次数。 它工作正常,但不区分大小写。 而且我被卡住了。 您能否提出建议?

    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);

这是代码。 感谢您的时间。

4 个回复

正如其他人所说,在将条目放入地图之前,您需要小写(或大写)键。 要计数单词,可以使用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()));

只需在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);

您可以使用Apache Commons Collections中的CaseInsensitiveMap

其他人建议将键更改为小写字母,但这不是一个选择,因为程序的其他部分也可以访问地图,并期望键采用其原始格式。 因此,您需要根据使用情况谨慎行事。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题
 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM