我正在尝试输出字符串中的第一个非重复字符。但是我不确定我的方法有什么问题,因为它总是返回 null。任何提示都非常受欢迎。
public static char findRepeating(String s){
HashMap<Character, Integer> charCount= new HashMap<>();
for (Map.Entry<Character, Integer> entry: charCount.entrySet()){
entry.setValue(0);
}
int count=0;
for (int i=0; i<s.length(); i++){
if (charCount.containsKey(s.charAt(i))){
count=charCount.get(s.charAt(i));
charCount.put(s.charAt(i), count++);
}
}
for (Character ch:charCount.keySet()){
if (charCount.get(ch)==0){
return ch;
}
}
return '\0';
}
最佳答案
你的问题是这个循环什么都不做
for (Map.Entry<Character, Integer> entry: charCount.entrySet()){
entry.setValue(0);
}
因为 map 是空的。
因此,if (charCount.containsKey(s.charAt(i)))
始终为 false。如果未找到键,您应该添加一个 else 子句将计数初始化为 1:
if (charCount.containsKey(s.charAt(i))){
count=charCount.get(s.charAt(i));
charCount.put(s.charAt(i), ++count); // changed to pre-increment
} else {
charCount.put(s.charAt(i), 1);
}
另请注意,我将 count++
更改为 ++count
,因为 count++
返回 count 的原始值,因此 Map 中的值不会改变。
关于java - 当尝试查找字符串中的第一个非重复字符时,方法始终返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36527181/