4

Javaで、文字列に表示されるすべての文字のリストと、それらの出現数を取得するにはどうすればよいですか?「私は今本当に忙しい」という文字列があるとしましょう。

i-2、a-2、r-2、m-1など。

4

4 に答える 4

6

すべてのキャラクターとその数のマッピングを持っているだけです。Stringusingの文字配列を取得し、拡張されたforループString#toCharArray()を使用してループすることができます。反復ごとに、マッピングからカウントを取得し、存在しない場合は設定してから、1ずつインクリメントして、マップに戻します。かなり簡単です。

基本的なキックオフの例は次のとおりです。

String string = "I am really busy right now";
Map<Character, Integer> characterCounts = new HashMap<Character, Integer>();
for (char character : string.toCharArray()) {
    Integer characterCount = characterCounts.get(character);
    if (characterCount == null) {
        characterCount = 0;
    }
    characterCounts.put(character, characterCount + 1);
}

マップの詳細については、このテーマに関するSunのチュートリアルを確認してください。


あなたはそれが「プロジェクトのため」だとコメントしましたが、それはかなり基本的で、まともなJavaの本/チュートリアルの最初の章でカバーされているので、典型的な宿題の質問です。Javaを初めて使用する場合は、基本をカバーするSunTrailsを理解することをお勧めします。

于 2010-05-31T00:09:24.853 に答える
0

宿題ですか?それを知らずに、私は最善の答えを想定します。

あなたの問題の背後にある論理は

  • 一度に1文字ずつリストを調べてください
  • その文字を数えます:可能な文字(ユニコードを除く)は256であるため、256intの配列を作成し、そこで数えることができます。このようにして、正しいカウンターを検索する必要はなく、正しいインデックスをインクリメントするだけです。
于 2010-05-30T23:58:02.037 に答える
0

正確なニーズはわかりませんが、大文字と小文字に関係なく出現回数をカウントしたいようです。空白などの文字も無視してください。したがって、次のようなものが必要になる場合があります。

String initial = "I   am really   busy  right now";

String cleaned = initial.replaceAll("\\s", "") //remove all whitespace characters
        .toLowerCase(); // lower all characters

Map<Character, Integer> map = new HashMap<Character, Integer>();
for (char character : cleaned.toCharArray()) {
    Integer count = map.get(character);
    count = (count!=null) ? count + 1 : 1;
    map.put(character, count);
}

for (Map.Entry<Character, Integer> entry : map.entrySet()) {
    System.out.println(entry.getKey() + " : " + entry.getValue());
}

正確な要件を満たすように正規表現を微調整します(句読点をスキップするなど)。

于 2010-05-31T00:57:13.307 に答える
0
        String input = "AAZERTTYAATY";
        char[] chars = input.toCharArray();
        Map<Character, Integer> map = new HashMap<>();
        for (char aChar : chars) {
            Integer charCount = map.putIfAbsent(aChar, 1);
            if (charCount != null) {
                charCount++;
                map.put(aChar, charCount);
            }
        }
于 2020-08-08T09:40:45.820 に答える