统计独特的令牌java

时间:2013-01-02 15:21:02

标签: java string unique

我想计算字符串中的唯一字符

输入:

"aabbccdefgh"

输出:

8

我的代码不起作用并抛出错误:

我的代码:

public class test {

    public static void main(String[] args) {
    String[] s = {""};
    int counter = 0;
    int pom  = 0;
    for(int i = 0; i < s.length; i++){
        for(int y = 0; y < 128; y++){
            if(s[i].compareTo(args[y])>0){
                pom++;
            }
        }
    }
    while(pom == 1){
        counter++;
    }
    System.out.println(counter);
}
}

有人能说出我出错的地方吗?

8 个答案:

答案 0 :(得分:3)

使用Set。它将确保唯一性,因此在您添加每个角色后,该组的大小将成为您的答案。

答案 1 :(得分:2)

为什么不使用Set来计算唯一的令牌数?

String str = "aabbccdefgh";
HashSet<Character> set = new HashSet<Character>();    

for (int i=0; i < str.length; i++) {
    char c = str.charAt(i);
    set.put(c);
}

System.out.println(set.size());

答案 2 :(得分:1)

我认为错误的根本原因是这段代码:

for(int y = 0; y < 128; y++){
    if(s[i].compareTo(args[y])>0){
        pom++;
    }
}

具体来说,循环内args[y]的比较。上面的代码假定您在调用它时将至少128个参数传递给java程序,即

java test param0 param1 ... param127

而且我很确定你得到ArrayIndexOutOfBoundsException

现在您已了解原因,请使用@Kevin's answer来解决您的问题。

答案 3 :(得分:1)

public static void main(String[] args) {
    String str = "aabbccdefgh";
    int count = 0;
    for (int i = 0; i < str.length(); i++) {
        if (str.substring(0, i).contains(str.charAt(i) + ""))
            System.out.println();

        else
            count++;
    }
    System.out.println(count);

}

不使用set就试试这个。

答案 4 :(得分:0)

由于任务只计算字符串中出现一次的字符,因此请使用Map<Character, Integer>计算字符频率。否则逻辑就会在其他答案中显示出来。

答案 5 :(得分:0)

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

    Map<Character, Integer> map = new HashMap<Character, Integer>();

    for (int i = 0; i < str.length(); i++) {
        Integer count = map.get(str.charAt(i));
        if (count == null)
            map.put(str.charAt(i), 1);
        else
            map.put(str.charAt(i), count + 1);
    }

    int uniqueCount = 0;

    for (Integer i : map.values())
        if (i == 1)
            uniqueCount++;

    System.out.println(uniqueCount);

}

这是另一个答案,它将使用Map计算在给定字符串中只出现一次的字符的出现次数。

答案 6 :(得分:0)

如果要计算唯一的字符数,则set不是一个选项,因为set包含重复的字符一次。例如,&#34; galaxy&#34;应该返回4但是使用set,它将返回5,因为&#39; a&#39;也将包括在内

答案 7 :(得分:0)

如果您已经使用Java 8,请使用以下代码:

public static void main(String[] args) {

    System.out.println(countDistinctCharacters("aabbccdefgh"));
}

public static long countDistinctCharacters(String letter) {
    return letter.chars().distinct().count();
}