ホームページ > Java > &#&チュートリアル > Javaで文字列内のさまざまな文字とその番号を取得する方法

Javaで文字列内のさまざまな文字とその番号を取得する方法

王林
リリース: 2023-04-20 12:04:06
転載
1878 人が閲覧しました

文字列内のさまざまな文字とその番号を取得する方法

この質問は 2 つのステップに分かれています。最初のステップはさまざまな文字を見つけることです。2 番目のステップは次のとおりです。ステップ 1、文字の数を数えます。ちょっとナンセンスだと思いませんか? まず答えを言わせてください。

public class DistinctCharsCount {     public static void main(String[] args) {         printDistinctCharsWithCount("itwanger");         printDistinctCharsWithCount("chenmowanger");     }      private static void printDistinctCharsWithCount(String input) {         Map<Character, Integer> charsWithCountMap = new LinkedHashMap<>();          for (char c : input.toCharArray()) {             Integer oldValue = charsWithCountMap.get(c);              int newValue = (oldValue == null) ? 1 :                     Integer.sum(oldValue, 1);              charsWithCountMap.put(c, newValue);         }         System.out.println(charsWithCountMap);     } }
ログイン後にコピー

プログラムの出力結果は次のとおりです:

{i=1, t=1, w=1, a=1, n=1, g=1, e=1, r=1} {c=1, h=1, e=2, n=2, m=1, o=1, w=1, a=1, g=1, r=1}
ログイン後にコピー

私のアイデアについてお話します:

1) LinkedHashMap を宣言するか、HashMap を使用できますが、前者は文字列を分割したままにすることができます。注文を分割した後、結果が一目でより明確に見えます。

Map を使用する理由は? Map のキーは繰り返すことが許可されておらず、繰り返された文字の数を蓄積するだけだからです。

2) 文字列を文字に分割し、トラバースします。

3) キーが null の場合、その番号は 1 であることを意味します。それ以外の場合は、前の値に 1 を加算してマップに戻し、前の文字数を上書きします。

その考え方は非常に明快ですよね?思わず拍手を送りたくなります。

そうですね、JDK 8 以降、Map には一度に複数のキーに値を割り当てる非常に強力なメソッド merge() が追加されました:

private static void printDistinctCharsWithCountMerge(String input) {     Map<Character, Integer> charsWithCountMap = new LinkedHashMap<>();      for (char c : input.toCharArray()) {         charsWithCountMap.merge(c, 1, Integer::sum);     }     System.out.println(charsWithCountMap); }
ログイン後にコピー

これは非常に強力ですか? 次のコマンドで実行できます。コードは 1 行です。最初のパラメータはキー、2 番目のパラメータは値、3 番目のパラメータは BiFunction です。つまり、キーがすでに存在する場合は、BiFunction に基づいて新しい値を再計算します。

文字が初めて出現する場合は、値を 1 に割り当てます。それ以外の場合は、前の値の合計を 1 に割り当てます。

以上がJavaで文字列内のさまざまな文字とその番号を取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート