【Java入門】文字列の中で最も多く出現する文字を出力する方法
JavaのStringクラスは文字列を表現するためのクラスで、プログラム内に記述されたすべての文字列リテラルはStringクラスのインスタンスとして扱われます。Stringオブジェクトは定数であり、一度生成するとその値を変更することができない(イミュータブル)という重要な特徴を持っています。
以下のプログラムでは、与えられた文字列の中から最も多く出現する文字(最大出現文字)とその出現回数を出力します。
サンプルコード
public class MaxOccuredCharacterTest {
public static void main(String[] args) {
String str1 = maxOccuredChar("tutorialspoint");
System.out.println(str1);
String str2 = maxOccuredChar("AABBAABBCCAABBAA");
System.out.println(str2);
String str3 = maxOccuredChar("111222333444333222111");
System.out.println(str3);
}
public static String maxOccuredChar(String str) {
char[] array = str.toCharArray();
int maxCount = 1;
char maxChar = array[0];
for(int i=0, j=0; i < str.length()-1; i=j) {
int count = 1;
while(++j < str.length() && array[i] == array[j]) {
count++;
}
if (count > maxCount) {
maxCount = count;
maxChar = array[i];
}
}
return (maxChar + " = " + maxCount);
}
}
実行結果
t = 1 A = 2 1 = 3
コードの解説
- toCharArray() メソッドを使用して、文字列をchar型の配列に変換します。
- 外側のforループと内側のwhileループを組み合わせることで、連続して並んでいる同じ文字を順番に走査しながらカウントします。
- カウントした回数が現在の最大値(maxCount)を上回った場合のみ、最大文字(maxChar)と最大出現回数を更新します。
- 最終的に「文字 = 出現回数」という形式の文字列を組み立てて返します。
注意点:このアルゴリズムが数えるのは「連続出現」
この実装がカウントしているのは、隣り合った位置に連続して出現する文字です。たとえば「tutorialspoint」の場合、't' は全体で3回登場しますが、連続しては現れないため、初期値である先頭文字がそのまま採用され「t = 1」という結果になります。
もし文字列全体を通じた累計出現回数(連続していない出現も含む)を集計したい場合は、HashMap<Character, Integer> を使って各文字の出現回数を記録していく方法が適しています。用途に応じて実装を選択しましょう。
-
JavaでStringIndexOutOfBoundsException(非検査例外)を処理する方法
StringIndexOutOfBoundsExceptionは、Javaにおける非検査例外(unchecked exception)の一つです。文字列は文字の集合体であり、Stringオブジェクトが持つ有効なインデックス範囲は [0、文字列の長さ] です。実際の文字列の範囲を超えて文字へアクセスしようとした場合に、この例外が発生します。例1:例外が発生するケースpublic class StringDemo { public static void main(String[] args) { String str = Welcome to Tutorials Poin
-
JavaでNumberFormatException(非検査例外)を処理する方法をわかりやすく解説
NumberFormatExceptionは、parseXXX()系のメソッドが文字列を数値に変換できなかった場合にスローされる非検査例外(unchecked exception)です。この例外はコンパイル時に強制されないため、開発者が適切に対処しないと実行時にプログラムが異常終了する原因となります。java.langパッケージのクラスには、NumberFormatExceptionをスローする可能性のあるメソッドやコンストラクタが多数存在します。代表的なものは以下の通りです。public static int parseInt(String s) throws NumberFormatExc