获取字符数

时间:2015-02-15 06:22:37

标签: java string-split

我需要分别得到每个重复字符的数量....我试过..但它只返回唯一字符数的计数......

输入:

SSDDVVDSSS

输出:

S - 5
D - 3
V - 2

这是我的代码

public class q2 {

public static void main(String[] args) {

   System.out.println(countUniqueCharacters("SSDDVVDSSS"));
}


public static int countUniqueCharacters(String input) {
boolean[] isItThere = new boolean[Character.MAX_VALUE];
for (int i = 0; i < input.length(); i++) {
    isItThere[input.charAt(i)] = true;
}

int count = 0;
for (int i = 0; i < isItThere.length; i++) {
    if (isItThere[i] == true){
        count++;
    }
}

return count;
}


}

3 个答案:

答案 0 :(得分:1)

以下是您的代码中的问题:

  1. 您正在定义65535大小的数组,这对于26个字符是不必要的。
  2. 您定义了一个布尔数组,其中每个元素将存储两个值true或false,如果您需要查看String中是否存在字符但不适合您的算法,则非常需要它。
  3. 你有共享的计数器变量,它会给你字符串的长度,即你的字符串中有多少个字符,而不是你需要的字符。
  4. 有多种方法可以解决此问题:

    • 使用索引从0到26的int数组维护字符A-Z的计数,最后打印计数:

          public static void main(String[] args) {
          int[] counts = countUniqueCharacters("SSDDVVDSSS");
          for (int i = 0; i < counts.length; i++) {
              if (counts[i] != 0) {
                  System.out.println("char " + ((char) ('A' + i)) + " repeated " + counts[i] + " times");
              }
          }
      }
      
          public static int[] countUniqueCharacters(String input) {
          int[] counts = new int[26];
          for (int i = 0; i < input.length(); i++) {
              counts[input.charAt(i) - 'A']++;
          }
          return counts;
      }
      
    • 另一种方法是使用带有字符的map作为键,将int作为值来表示该字符重复的计数。

答案 1 :(得分:0)

public static void main(String[] args) {
        String str = "SSDDVVDSSS";
        int counts[] = new int[(int) Character.MAX_VALUE];

        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            counts[(int) c]++;
        }

        for (int i = 0; i < counts.length; i++) {
            if (counts[i] > 0)
                System.out.print((char) i + "-" + counts[i] + "\n");
        }
    }

答案 2 :(得分:0)

你的上一次&#39;为&#39;循环遍历计数器数组并计算它包含的具有真值的条目数。 因此,你会得到一些独特的字符。

试试这个:

public class q2 {

public static void main(String[] args) {

    countUniqueCharacters("SSDDVVDSSS");
}


public static void countUniqueCharacters(String input) {


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

    for (int i = 0; i < input.length(); i++){

        if (map.get(input.charAt(i)) == null){
             map.put(input.charAt(i),1);
        }
        else{
            map.put(input.charAt(i),map.get(input.charAt(i))+1);
        }
    }

     System.out.print(map);
}

}