java - 当尝试查找字符串中的第一个非重复字符时,方法始终返回 null

标签 java string hashmap character

我正在尝试输出字符串中的第一个非重复字符。但是我不确定我的方法有什么问题,因为它总是返回 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/

相关文章:

java - 正则表达式提取数字并用千位分隔符对它们进行分组

javascript - 使用不断变化的 HashMap 和 Nodejs 写入 Excel

algorithm - 使用链接散列并使用大小为 `m` 的表

java - 如何根据 2 个值从 map 中过滤文档并创建另一个 map

java - maven从哪里获取${}包围的变量的值?

java - 使用 Java 中的 Customsearch 搜索恰好包含两个给定字符串的页面

java - 即使文本文件位于包内,也会引发 FileNotFoundException?

Java:在o(1)空间和o(n)时间中反转字符串

java - 基于行起始符分割文本文件

与 scanf() 或 if() 混淆