在尝试查找String中的第一个非重复字符时,方法始终返回null

时间:2016-04-10 07:41:36

标签: 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';
    }

2 个答案:

答案 0 :(得分:1)

你的问题是这个循环什么都不做

    for (Map.Entry<Character, Integer> entry: charCount.entrySet()){
        entry.setValue(0);
    }

因为地图是空的。

因此,if (charCount.containsKey(s.charAt(i)))始终为假。如果找不到密钥,则应添加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的原始值,因此地图中的值不会发生变化。

答案 1 :(得分:0)

因为你正在遍历没有元素的charcount。

Map.Entry<Character, Integer> entry: charCount.entrySet()