-1

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

输入:

"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);
}
}

有人能指出我哪里出错了吗?

4

8 回答 8

3

使用Set. 它将确保唯一性,因此在您添加每个字符后,集合的大小将是您的答案。

于 2013-01-02T15:29:48.163 回答
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());
于 2013-01-02T15:29:25.337 回答
1

我相信错误的根本原因是这段代码:

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

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

java test param0 param1 ... param127

我很确定你会得到ArrayIndexOutOfBoundsException.

既然您知道原因,请使用@Kevin 的答案来解决您的问题。

于 2013-01-02T15:28:54.307 回答
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 试试这个。

于 2013-01-02T15:46:25.560 回答
0

由于任务是只计算字符串中出现一次的字符,因此使用 aMap<Character, Integer>来计算字符频率。否则,其他答案中几乎都显示了逻辑。

于 2013-01-02T15:37:09.443 回答
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 计算在给定字符串中仅出现一次的字符的出现次数。

于 2013-01-03T09:34:51.287 回答
0

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

于 2013-07-09T12:05:26.547 回答
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();
}
于 2016-03-05T22:05:35.767 回答