gpt4 book ai didi

java - 查找HashMap中存储的字符的索引值

转载 作者:行者123 更新时间:2023-12-01 16:54:32 27 4
gpt4 key购买 nike

我希望打印相应字符的索引值,次数与它出现的次数一样using HashMap .

例如,假设我有 String str = "Hello World" 。目前该程序通过{d=1, W=1, e=1, r=1, o=2, l=3, H=1}显示字符的出现。 .

我想要实现的结果集是 {d=[9], o=[4, 6], r=[7], W=[5], H=[0], l=[2, 3, 8], e=[1]}哪里*=[*]代表key=[indexValue] .

(最终结果集中不考虑空白字符。)

import java.util.HashMap;
import java.util.Map;

public class ConcordanceOfStrings {

public static void main(String[] args) {
String str = "Hello World";

//code to remove whitespaces
String newStr = str.replaceAll(" ", "");

Map<Character, Integer> numCount = new HashMap<Character, Integer>(Math.min(newStr.length(), 26));

System.out.println("The count is: ");
for(int i=0; i<newStr.length(); i++){
char charAt = newStr.charAt(i);
if(!numCount.containsKey(charAt)){
numCount.put(charAt, 1);
}
else{
numCount.put(charAt, numCount.get(charAt)+1);
}
}
System.out.println(numCount);
}
}

最佳答案

你们很接近。现在,您将结果存储在 Map<Character, Integer> 中,因此从每个字符到它在字符串中出现的次数的映射。

要存储该字符出现的所有索引,您需要有一个 Map<Character, List<Integer>> :每个字符都会映射到一个整数列表,该列表将是该字符出现的索引列表。

在当前代码中,您只需调整填充 map 的逻辑即可:

if(!numCount.containsKey(charAt)){  
numCount.put(charAt, new ArrayList<>(Arrays.asList(i))); // <-- we store a list containing the first index i
// numCount.put(charAt, 1);
} else{
numCount.get(charAt).add(i); // <-- we add to the existing list the index i
// numCount.put(charAt, numCount.get(charAt)+1);
}

在映射不包含字符的情况下,我们使用包含第一个索引 i 的列表来初始化映射。 。 Arrays.asList(i)返回一个固定大小的列表,因此我将其包装在另一个 ArrayList 中.

如果 map 已经包含该角色,我们只需要获取当前索引列表并添加我们刚刚找到的索引即可。

<小时/>

如果您使用 Java 8,则可以使用 Streams 更简单地编写整个代码:

Map<Character, List<Integer>> numCount = 
IntStream.range(0, str.length())
.filter(i -> str.charAt(i) != ' ')
.boxed()
.collect(Collectors.groupingBy(
i -> str.charAt(i),
Collectors.mapping(v -> v - 1, Collectors.toList())
));

关于java - 查找HashMap中存储的字符的索引值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34842013/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com