0

I wanted to get the average of each unique character in a string. I have an example here as it would be easier to illustrate it.

String:

The big brown fox

Average of each character including spaces:

T = 1/17 = .058
h = 1/17 = .058
e = 1/17 = .058
' '= 3/17 = .176
b = 2/17 = .117
i = 1/17 = .058
g = 1/17 = .058
r = 1/17 = .058
o = 2/17 = .117
w = 1/17 = .058
n = 1/17 = .058
f = 1/17 = .058
x = 1/17 = .058

So far all my attempts have failed, think my brain is not working at the moment. How do I code this? Any help or input will be greatly appreciated.

I have this code as a solution. It just came to me when I was copy pasting my code here in stack. I hope this is not a re-post because I just answered the same thing a few minutes ago but it didn't show up.

 Map<String, Integer> storeCharCount = new HashMap<String, Integer>();

        String a = "The big brown fox";


        for (int x=0; x<a.length(); x++){
            char getChar = a.charAt(x);
            String convGetChar = Character.toString(getChar);

            Integer countChar = storeCharCount.get(convGetChar);
            storeCharCount.put(convGetChar, (countChar==null?countChar=1:countChar+1));

        }
        System.out.println("Map: "+ storeCharCount);
        double RelFrequency = 0;
        for (Map.Entry<String, Integer> getValue: storeCharCount.entrySet()){

            RelFrequency = (double)(getValue.getValue())/(a.length());
            System.out.println("Character "+getValue.getKey() +"  Relative Frequency: "+RelFrequency);

        }

Here is the output

Map: {f=1, g=1,  =3, e=1, b=2, n=1, o=2, h=1, i=1, w=1, T=1, r=1, x=1}
Character f  Relative Frequency: 0.058823529411764705
Character g  Relative Frequency: 0.058823529411764705
Character    Relative Frequency: 0.17647058823529413
Character e  Relative Frequency: 0.058823529411764705
Character b  Relative Frequency: 0.11764705882352941
Character n  Relative Frequency: 0.058823529411764705
Character o  Relative Frequency: 0.11764705882352941
Character h  Relative Frequency: 0.058823529411764705
Character i  Relative Frequency: 0.058823529411764705
Character w  Relative Frequency: 0.058823529411764705
Character T  Relative Frequency: 0.058823529411764705
Character r  Relative Frequency: 0.058823529411764705
Character x  Relative Frequency: 0.058823529411764705   
4

2 に答える 2

1

これが私の提案です。文字列内のすべての文字を反復処理することから始め、見つかった場合は freq を更新し、そうでない場合は 1 を追加します。次に、再度反復して結果を出力します。

        String s = "The big brown fox";
    Map<Character, Float> m = new TreeMap<Character, Float>();
    for (char c : s.toCharArray()) {
        if (m.containsKey(c))
            m.put(c, m.get(c) + 1);
        else
            m.put(c, 1f);
    }

    for (char c : s.toCharArray()) {
        float freq = m.get(c) / s.length();
        System.out.println(c + " " + freq);
    }
于 2012-05-18T10:31:33.280 に答える
0

それは最善の方法ではないと思いますが、各文字 [az][AZ] を数え、すべての " " を削除してから、= 文字の数/すべての文字を計算できます。

役立つことを願っています。

于 2012-05-18T10:08:52.440 に答える