2011-12-11 6 views
1

私は入力として文字列を持っています。テスターティー。文字列の各アルファベットの数を調べたいと思います。私はHashMapを使ってみました。しかし、私は配列を使ってこれを実装したい。 あなたは何らかの方法を提案できますか?配列を使って各アルファベットを数える

+0

各アルファベットは?それぞれの手紙? – talnicolas

+1

他のコレクションf/wsの代わりに配列を使用する理由質問を正しく説明してください。 – buch11

答えて

1

マップを使用する方が簡単です。文字はキーで値は数です。配列を使うのはもっと難解です。各文字に番号を割り当て、その番号を配列のインデックスとして使用し、配列にその数を格納することができます。したがって、 'A'は1、 'B'は2などです。アルゴリズムは

  1. 文字列を取得します。
  2. 文字のインデックスを取得します。
  3. インクリメントもちろん​​1

によって、アレイ内のそのインデックスの値は、あなたがnullチェックと何を行う必要があります。

これは論理的にマップであることに注意してください。あなたがマップを使用しているときだけ、上記のステップ2が実行されます。

1
ArrayList<Character> ch = new ArrayList<Character>(); 
ArrayList<Integer> count = new ArrayList<Integer>(); 

someMethod(String input) { 
    for(char c : input.toCharArray()) { 
    if(ch.indexOf(c) != -1) { 
     i.set(ch.indexOf(c), i.get(ch.indexOf(c))+1); 
    } else { 
     ch.add(c); 
     i.add(1); 
    } 
    } 
} 
1

あなたがMultiset iunterfaceを実装するコレクション、すなわちHashMultiset(グーグルグアバライブラリーから取られたの両方)を使用する必要があります。 Multisetは、コレクション内のオブジェクトのカウントを保持するように設計されています

Multiset<String> m = HashMultiset.create(Arrays.asList("a", "a", "b", "c", "b", "a")); 
// m.toString() prints "a x 3, b x 2, c x 1" 
// m.count() gives 6 
2

あなたは数値文字割り当てるためにASCIIを使用することができます。一つの方法は、その後、あなたが最初の配列を作成し、可能性があり enter image description here

int[] letters = new int[128]; // There are 128 different possible characters. 

for(int i = 0; i < input.length; i++) { 
    char current = input.charAt(i); 
    int index = Character.getNumericValue(char); 
    letters[index]++; 
} 
1

をcharAt(index)メソッドを使用して文字列をトラバースし、現在のcharと配列内の文字を一致させます。一致するものが見つかった場合は、その値をインクリメントするか、配列の新しいエントリとして追加します。