HOWTO · Java
Java で大文字と小文字を無視する
この記事では、Java で大文字と小文字を無視する方法を紹介します。
このページの内容
Javaで大文字と小文字を区別せずに2つの文字列が等しいか調べるには、equalsIgnoreCase() を呼び出します。後続の処理で正規化済みの文字列が必要な場合は、toUpperCase() または toLowerCase() で変換してから equals() で比較します。大文字と小文字を無視して順序を比較するには、compareToIgnoreCase() を使います。
Javaの String は不変です。そのため、toUpperCase() と toLowerCase() は変換後の内容を持つ String を返し、元の値は変更しません。これらのメソッドと equalsIgnoreCase() はJavaの大文字・小文字の変換規則を使いますが、言語ごとのUnicode完全ケースフォールディングは行いません。等価性、正規化した値、順序付けのどれが必要かに応じてメソッドを選びましょう。
Javaで toUpperCase() メソッドを使って大文字と小文字を区別せずに比較する
2つの文字列を toUpperCase(Locale.ROOT) で変換し、変換結果を equals() で比較します。Locale.ROOT を指定すると、変換結果がマシンの既定ロケールに左右されません。識別子などをプログラム上で正規化するときに便利です。通常のASCII文字の例では、英語や米国の既定ロケールを指定する必要はありません。
import java.util.Locale;
public class UppercaseComparison {
public static void main(String[] args) {
String first = "icecream";
String second = "IceCream";
String normalizedFirst = first.toUpperCase(Locale.ROOT);
String normalizedSecond = second.toUpperCase(Locale.ROOT);
boolean equalIgnoringCase = normalizedFirst.equals(normalizedSecond);
System.out.println(equalIgnoringCase);
}
}
この方法では、変換後に返される String の値を比較します。機械的な比較のために変換する場合は Locale.ROOT を使いましょう。ロケールに応じたテキスト処理が必要な場合は、別の方法を検討してください。
Javaで toLowerCase() メソッドを使って大文字と小文字を区別せずに比較する
小文字への正規化も同じ手順で行えます。2つの文字列を toLowerCase(Locale.ROOT) で変換し、その後 equals() で比較します。明示的にロケールを指定することで、結果がユーザーの既定ロケールに依存するのを防げます。後続の処理でも小文字に正規化した値を使う場合に適しています。単に等しいかどうかを調べるだけなら、equalsIgnoreCase() のほうが簡潔です。
import java.util.Locale;
public class LowercaseComparison {
public static void main(String[] args) {
String first = "icecream";
String second = "IceCream";
String normalizedFirst = first.toLowerCase(Locale.ROOT);
String normalizedSecond = second.toLowerCase(Locale.ROOT);
boolean equalIgnoringCase = normalizedFirst.equals(normalizedSecond);
System.out.println(equalIgnoringCase);
}
}
大文字への変換と同様に、toLowerCase() は変換後の内容を持つ String を返し、元の値は変更しません。また、言語ごとのUnicode完全ケースフォールディングの代わりにはなりません。
Javaで equalsIgnoreCase() メソッドを使って大文字と小文字を区別せずに比較する
等しいかどうかを直接調べるには、一方の文字列で equalsIgnoreCase() を呼び出し、もう一方を引数に渡します。戻り値はbooleanです。Javaの大文字・小文字を区別しない比較で文字列が等しければ true、そうでなければ false を返します。たとえば、"icecream".equalsIgnoreCase("IceCream") はtrueになります。
public class IgnoreCaseEquality {
public static void main(String[] args) {
String first = "icecream";
String second = "IceCream";
boolean equalIgnoringCase = first.equalsIgnoreCase(second);
System.out.println(equalIgnoringCase);
}
}
この比較は特定の言語やロケールに合わせて調整されておらず、Unicode完全ケースフォールディングも行いません。言語に応じた照合規則が必要な場合は、このメソッドが各言語のテキスト規則をすべて扱うと考えず、その要件に適したAPIを使ってください。
Javaで compareToIgnoreCase() メソッドを使って大文字と小文字を区別せずに比較する
文字列のソートなど、大文字と小文字を区別しない辞書順の比較が必要な場合は compareToIgnoreCase() を使います。戻り値が0なら、大文字と小文字を無視した場合に文字列が等しいことを示します。負の値なら最初の文字列が後者より前に並び、正の値なら後に並びます。0以外の戻り値が、最初に異なる文字の差そのものになるとは限りません。
public class IgnoreCaseOrdering {
public static void main(String[] args) {
String first = "apple";
String second = "Banana";
int comparison = first.compareToIgnoreCase(second);
System.out.println(comparison < 0);
}
}
この例は、順序関係を表すbooleanを出力します。等しいかどうかだけを調べる場合は、代わりに equalsIgnoreCase() を使ってください。