-2

私はこの文字列を持っていますstring="aaaaaaaadddssaaakkaaaaand"その中の文字を知り、その出現回数を数える必要があります.stackOverFlowでこのコードを見つけましたが、ユーザーに入力を求めずに文字を数える必要があるため、役に立ちません.

public static int countOccurrences(String haystack, char needle)
{
    int count = 0;
    for (int i=0; i < haystack.length(); i++)
    {
        if (haystack.charAt(i) == needle)
        {
             count++;
        }
    }
    return count;
}

5 つの a と 4 つの v などがあることを知る方法が必要です。

4

3 に答える 3

1

これは機能しますか?

public static Map<Character, Integer> countOccurrences(String haystack)
{
    Map<Character, Integer> count = new HashMap<Character, Integer>();
    for (int i=0; i < haystack.length(); i++)
    {
        char c = haystack.charAt(i);
        Integer charCount = count.get(c);
        if(charCount == null) {
            count.put(c, 1);
        } else {
            count.put(c, charCount + 1);
        }
    }
    return count;
}
于 2012-07-07T16:30:49.393 に答える
1

コードの回答を提供するつもりはありませんが、次の別のアイデアから始めてください。

  1. 文字の空の配列 (または arrayList) と空の文字列、そしてもちろん「カウントされる」文字列 (干し草の山) が必要です。
  2. 並べ替え方法を使用して干し草の山を 調べ、アルファベット順に並べ替えます(これを調べてください。それほど難しくありません)。
  3. アルファベット順に並べ替えたら、アルファベット順に並べ替えられた新しい文字列を通過する別の for ループを実行し、位置 i+1 の文字がその前の文字と同じでない場合は、文字の空の配列に新しい文字を追加します。さて、このループの終わりに、その文字の配列には、元の文字列の異なる文字の小さなリストが含まれます!
  4. まだ別の for ループ...これが最後のループです。今回は、for ループ内の for ループになります。外側の for ループは新しい文字配列を通過し、内側のループは元の文字列の文字を循環します。これで、文字配列の最初の文字が文字列に何回来て、次に 2 番目、3 番目、4 番目....などになるかを数えることができます。毎回、「5 a's」「6 b's」などを出力できます。 .

これはうまくいくはずです。お知らせ下さい!

于 2012-07-07T16:59:22.137 に答える
1

文字列内のすべての文字の数を取得する必要がありますか? その場合、次のようなクラスが機能する可能性があります。

public class CharCounter {

  private final int[] counts = new int[Character.MAX_VALUE];

  public CharCounter(String input) {
    for (int i = 0; i < input.length(); i++) {
      counts[input.charAt(i)] += 1;
    }
  }

  public int getCount(char c) {
    return counts[c];
  }
}

それを使用するには、次のようにします。

CharCounter counter = new CharCounter("hello world");
System.count.println("number of 'l' characters: " + counter.getCount('l'));
于 2012-07-07T16:37:02.077 に答える