Java中不区分大小写的映射

Java中不区分大小写的映射,java,for-loop,case-insensitive,linkedhashmap,Java,For Loop,Case Insensitive,Linkedhashmap,我有一个代码,可以写入文本文件,然后打印出文本文件中每个单词的查找次数。它工作正常,但需要区分大小写。我被卡住了。你能建议怎么做吗 Map<String, Integer> map = new LinkedHashMap<>(); for (String w : data) { Integer n = map.get(w.); n = (n == null) ? 1 : ++n; map.put(w, n);

我有一个代码,可以写入文本文件,然后打印出文本文件中每个单词的查找次数。它工作正常,但需要区分大小写。我被卡住了。你能建议怎么做吗

    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);
Map Map=newlinkedhashmap();
for(字符串w:数据){
整数n=map.get(w.);
n=(n==null)?1:+n;
地图放置(w,n);
}
系统输出打印项次(map);
这是密码。 感谢您抽出时间。

您可以使用Apache Commons Collections

其他人建议将密钥更改为小写,但这可能不是一个选项,因为程序的其他部分也可以访问地图,并希望密钥保持原始格式。因此,您需要根据用例小心处理。

您可以从Apache Commons集合中使用


其他人建议将密钥更改为小写,但这可能不是一个选项,因为程序的其他部分也可以访问地图,并希望密钥保持原始格式。因此,您需要根据用例小心处理。

只需在
for
循环中使用
.toLowerCase()
for
w
,在
for
循环中使用
.toLowerCase()
for
即可将字符串转换为小写,同时放入映射

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 Map=newlinkedhashmap();
for(字符串w:数据){
整数n=map.get(w.toLowerCase());
n=(n==null)?1:+n;
put(w.toLowerCase(),n);
}
系统输出打印项次(map);

您可以在放入地图时将字符串转换为小写

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 Map=newlinkedhashmap();
for(字符串w:数据){
整数n=map.get(w.toLowerCase());
n=(n==null)?1:+n;
put(w.toLowerCase(),n);
}
系统输出打印项次(map);

正如其他人所说,在将条目放入地图之前,需要将键小写(或大写)。要计算字数,您可以使用:

Map frequencies=newlinkedhashmap();
data.forEach(w->frequencies.merge(w.toLowerCase(),1,Integer::sum);
或者,您也可以使用流执行此操作:

Map<String, Long> frequencies = data.stream()
    collect(Collectors.groupingBy(
            String::toLowerCase,
            Collectors.counting()));
Map frequencies=data.stream()
收集(Collector.groupingBy)(
字符串::toLowerCase,
收集器。计数();

正如其他人所说,在将条目放入地图之前,您需要将键小写(或大写)。要计算字数,您可以使用:

Map frequencies=newlinkedhashmap();
data.forEach(w->frequencies.merge(w.toLowerCase(),1,Integer::sum);
或者,您也可以使用流执行此操作:

Map<String, Long> frequencies = data.stream()
    collect(Collectors.groupingBy(
            String::toLowerCase,
            Collectors.counting()));
Map frequencies=data.stream()
收集(Collector.groupingBy)(
字符串::toLowerCase,
收集器。计数();

在将数据放入映射之前,只需将文本小写或大写…在将数据放入映射之前,只需将文本小写或大写…几乎。从映射获取计数器时,还必须使用小写。:)或只需
map.merge(w.toLowerCase(),1,Integer::sum)
差不多。从映射中获取计数器时,还必须使用小写。:)或仅使用
map.merge(w.toLowerCase(),1,Integer::sum)根据文档,您已链接,此映射实现的工作方式与其他解决方案完全相同,即将所有键也转换为小写。根据文档,您已链接,此映射实现的工作方式与其他解决方案完全相同,即将所有键也转换为小写。