【Java】大文字と小文字を区別せずに文字列を比較する方法を解説
Javaでは、いくつかの異なる方法で文字列を比較することができます。それぞれ特徴が異なるため、用途に応じて適切な方法を選ぶことが重要です。
- compareTo()メソッドを使う方法:2つの文字列を辞書順(Unicode値ベース)に比較し、大小関係まで判定できます。
- == 演算子を使う方法:変数の参照(オブジェクトの同一性)を比較するため、値の比較には不向きです。
- equals()メソッドを使う方法:大文字・小文字を含めた文字列の内容そのものを比較できます。
以下、それぞれの方法を詳しく見ていきましょう。
1. compareTo()メソッドで比較する
compareTo()メソッドは、2つの文字列を辞書順(レキシコグラフィック)に比較します。比較は文字列内の各文字のUnicode値に基づいて行われ、このStringオブジェクトが表す文字列と、引数として渡された文字列が辞書順に比較されます。戻り値が0なら両者は等しく、負の値なら引数の文字列より前、正の値なら後にあることを示します。
サンプルコード
import java.util.Scanner;
public class StringComparison {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter string1: ");
String str1 = sc.next();
System.out.println("Enter string2: ");
String str2 = sc.next();
int result = str1.compareTo(str2);
if (result < 0) {
System.out.println("str1 is not equal to str2");
} else if (result == 0) {
System.out.println("str1 is equal to str2");
} else {
System.out.println("str1 is not equal to str2");
}
}
}
実行例 1
Enter string1: Hello Enter string2: Hello str1 is equal to str2
実行例 2
Enter string1: hello Enter string2: hi str1 is not equal to str2
2. == 演算子で比較する
== 演算子でも2つの文字列を比較できますが、この演算子は参照(リファレンス)を比較するため、文字列の内容ではなく同じオブジェクトを指しているかどうかを判定します。文字列リテラルは文字列プールで共有されるため同じ内容でもtrueになることがありますが、newで生成したオブジェクト同士では意図しない結果になる可能性があります。文字列の値を比較する場合は、次に紹介するequals()メソッドを使いましょう。
サンプルコード
public class StringComparison {
public static void main(String[] args) {
String str1 = "hello";
String str2 = "hello";
if (str1 == str2) {
System.out.println("Both are equal");
} else {
System.out.println("Both are not equal");
}
}
}
出力結果
Both are equal
3. equals()メソッドで比較する
Stringクラスのequals()メソッドは、引数として渡された文字列と現在の文字列を比較します。引数がnullではなく、大文字・小文字も含めて同一の文字シーケンスを持つStringオブジェクトである場合にのみtrueを返します。つまり、「Hello」と「hello」のような表記の違いは別の文字列とみなされます。
サンプルコード
import java.util.Scanner;
public class StringComparison {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter string1: ");
String str1 = sc.next();
System.out.println("Enter string2: ");
String str2 = sc.next();
boolean bool = str1.equals(str2);
if (bool) {
System.out.println("Both are equal");
} else {
System.out.println("Both are not equal");
}
}
}
実行例 1(大文字・小文字が異なる場合)
Enter string1: Hello Enter string2: hello Both are not equal
実行例 2(完全に一致する場合)
Enter string1: Hello Enter string2: Hello Both are equal
大文字・小文字を区別せずに比較する方法
大文字と小文字の違いを無視して文字列を比較したい場合は、StringクラスのequalsIgnoreCase()メソッドを使用します。このメソッドはequals()メソッドとよく似ていますが、比較時に大文字・小文字を区別しない点が異なります。ユーザー入力の表記ゆれを許容したい場合などに非常に便利です。
サンプルコード
import java.util.Scanner;
public class StringComparison {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter string1: ");
String str1 = sc.next();
System.out.println("Enter string2: ");
String str2 = sc.next();
boolean bool = str1.equalsIgnoreCase(str2);
if (bool) {
System.out.println("Both are equal");
} else {
System.out.println("Both are not equal");
}
}
}
実行例
Enter string1: Hello Enter string2: hello Both are equal
まとめ
Javaで文字列を比較する際は、目的に応じてメソッドを使い分けましょう。大文字・小文字を区別して内容を比較するならequals()、区別せずに比較するならequalsIgnoreCase()、辞書順での大小関係が必要な場合はcompareTo()(またはcompareToIgnoreCase())を使用します。なお、== 演算子は参照の一致を確認するものなので、文字列の値比較には使わないよう注意してください。
-
【DIY】フェルトとグルーガンで作るiPhone・iPad手作りケースの作り方
iPhoneやiPadは美しいデバイスですが、床に落としてしまうと簡単に傷ついてしまう繊細な一面も持っています。だからこそ、多くのユーザーがケースで保護しているのです。現在販売されているケースは、ほとんど存在感のないミニマルな薄型タイプから、かなり個性的なデザインまで実に多彩。しかし、自分らしさを本当に表現したいなら、いっそオリジナルのケースを手作りしてみてはいかがでしょうか? 今回ご紹介するのは、最小限の道具と数分の作業で完成するシンプルな手作りケースのデザインです。少し空き時間があって、手作りに挑戦してみたい方にぴったりの内容となっています。 関連記事:iPhoneのおすすめアクセサリー|
-
Javaで文字列を比較する方法|equals()とequalsIgnoreCase()の使い分けを徹底解説
Javaで文字列の等価性を比較する際は、Stringクラスが提供するequalsメソッドまたはequalsIgnoreCaseメソッドを使用するのが基本です。この記事では、それぞれのメソッドの使い方に加えて、==演算子で文字列を比較してはいけない理由についても詳しく解説します。 equals()メソッドで文字列を比較する 2つの文字列を比較し、大文字と小文字の違いまで厳密に判定したい場合はequals()メソッドを使用します。 次のコード例では、2つのStringインスタンスが大文字小文字を含むすべての文字において一致しているかどうかを判定しています。 public class Compare