java,如何在不重复的情况下查找字符串中的字母数量

时间:2017-02-07 22:15:21

标签: java string int letters

我正在尝试构建一个函数,它获取一串字母,并打印字符串中每个字母的数量。 例如: input:String =" aaabbaccxyxyx" 输出:4a2b2c3x2y

这就是我提出的:

fun quicksort [] = []
  | quicksort (x::xs) =
    let 
        val (left, right) = List.partition (fn y => y<x) xs
    in
        quicksort left @ [x] @ quicksort right
    end

但是,这是输出:4a4a4a2b2b4a2c2c3x2y3x2y3x 很多重复..

任何帮助如何使它正确? 请记住,该函数需要返回字符串,而不仅仅是将其打印出来。 谢谢! =)

4 个答案:

答案 0 :(得分:1)

我会创建一个int数组来保持字符串中每个字母的数量。因为有26个字母,所以数组的length应为26

public static String numLetters(String s) {
    int[] count = new int[26];
    for (int i = 0; i < s.length(); i++) {
        char c = s.charAt(i);
        count[(int)(c - 'a')]++;
    }
    String ans = "";
    for (int i = 0; i < 26; i++) {
        if (count[i] != 0) {
            ans += String.valueOf(count[i]) + (char)(i + 'a');
        }
    }
    return ans;
}

答案 1 :(得分:1)

一个简单的变体可能如下所示:

public static String countChars(String arg) {
    String res = "";
    boolean[] counted = new boolean[arg.length()];
    for (int i = 0; i < counted.length; i++) {
        if (!counted[i]) {
            char c = arg.charAt(i);
            int counter = 1;
            for (int j = i + 1; j < counted.length; j++) {
                if (arg.charAt(j) == c) {
                    counter++;
                    counted[j] = true;
                }
            }
            res += counter + "" + c;
        }
    }
    return res;
}

答案 2 :(得分:1)

如果您想保留原始结构,建议您使用StringBuilder,以便删除已经看过的字符。如果您删除了某个字符,则必须调整索引ij

public static String numLetters(String str){
    StringBuilder s = new StringBuilder(s);
    String end = new String();
    int counter = 0;
    char c,d;
    for(int i=0; i<s.length();i++){
        c = s.charAt(i);
        for(int j=0; j<s.length();j++){
            d = s.charAt(j);
            if(c == d){
                s.deleteCharAt(j);
                if (i >= j) i--;
                j--;
                counter++;
            }
        }
        end = end + counter+c;
        counter = 0;
    }

    return end;
}

答案 3 :(得分:0)

试试这个:

int count = StringUtils.countMatches("a.b.c.d", ".");