Javaで2つの文字列を比較するプログラムの書き方|サンプルコード付きで解説
この記事では、Javaを使って2つの文字列を比較する方法を解説します。文字列とは文字が順番に並んだものであり、Javaプログラミング言語ではStringクラスのオブジェクトとして扱われます。
なお、「==」演算子はオブジェクトの参照(アドレス)を比較するためのものであり、文字列の中身そのものを比較する用途には適していません。文字列の内容を比較するには、各文字を先頭から順に照合し、異なる文字が見つかった時点でその文字コードの差を返すという方法が一般的です。本記事では、このロジックを自前で実装するサンプルコードを紹介します。
以下に実行例を示します。
入力値:
1つ目の文字列 : Java Program 2つ目の文字列 : Java
期待される出力:
文字列比較の結果 : 8
アルゴリズム
ステップ1 - 処理を開始する ステップ2 - 必要な変数を宣言する ステップ3 - 比較対象となる文字列の値を定義する ステップ4 - それぞれの文字列の長さを求め、短い方の長さを変数に代入する ステップ5 - その長さの回数だけ繰り返し処理を行い、両方の文字列の同じインデックス位置にある文字を取得する。取得した文字を整数(文字コード)に変換して比較する ステップ6 - 異なる文字が見つかった場合は、その文字コードの差を計算して結果として返す ステップ7 - 結果を画面に表示する ステップ8 - 処理を終了する
例1:mainメソッドにすべての処理をまとめて書く場合
まず、すべての処理をmainメソッド内に直接記述するシンプルな例を見てみましょう。
public class CompareStrings {
public static void main(String args[]) {
String input_string_1 = new String("Java Program");
System.out.println("定義された文字列: " + input_string_1);
String input_string_2 = new String("Java");
System.out.println("定義された文字列: " + input_string_2);
int length_1 = input_string_1.length();
int length_2 = input_string_2.length();
int minimum_length = Math.min(length_1, length_2);
int result = 0;
for (int i = 0; i < minimum_length; i++) {
int character_1 = (int) input_string_1.charAt(i);
int character_2 = (int) input_string_2.charAt(i);
if (character_1 != character_2) {
result = character_1 - character_2;
break;
}
}
if (result == 0 && length_1 != length_2) {
result = length_1 - length_2;
}
System.out.println("\n文字列比較の結果: " + result);
}
}出力
定義された文字列: Java Program 定義された文字列: Java 文字列比較の結果: 8
例2:オブジェクト指向スタイルでメソッドに分割する場合
次に、比較処理を独立したメソッドとして切り出し、オブジェクト指向らしい再利用しやすい構造にした例を紹介します。
public class CompareStrings {
public static int string_compare(String input_string_1, String input_string_2) {
int length_1 = input_string_1.length();
int length_2 = input_string_2.length();
int minimum_length = Math.min(length_1, length_2);
for (int i = 0; i < minimum_length; i++) {
int character_1 = (int) input_string_1.charAt(i);
int character_2 = (int) input_string_2.charAt(i);
if (character_1 != character_2) {
return character_1 - character_2;
}
}
if (length_1 != length_2) {
return length_1 - length_2;
} else {
return 0;
}
}
public static void main(String args[]) {
String input_string_1 = new String("Java Program");
System.out.println("定義された文字列: " + input_string_1);
String input_string_2 = new String("Java");
System.out.println("定義された文字列: " + input_string_2);
System.out.println("\n文字列比較の結果: " + string_compare(input_string_1, input_string_2));
}
}出力
定義された文字列: Java Program 定義された文字列: Java 文字列比較の結果: 8
補足:compareTo()メソッドを使う方法
実際の開発では、Stringクラスが標準で提供しているcompareTo()メソッドを利用するのが最も簡単です。このメソッドは上記の自作ロジックと同様に、辞書順での差を整数値として返します。
int result = input_string_1.compareTo(input_string_2);
- 戻り値が0の場合 → 2つの文字列は完全に一致しています
- 戻り値が正の値の場合 → 呼び出し元の文字列の方が辞書順で後ろ(大きい)ことを示します
- 戻り値が負の値の場合 → 引数に渡した文字列の方が辞書順で後ろ(大きい)ことを示します
今回の例では「Java Program」(12文字)と「Java」(4文字)の長さの差である8が返されます。また、単純に2つの文字列が等しいかどうかだけを確認したい場合は、equals()メソッドや大文字小文字を無視できるequalsIgnoreCase()メソッドを使うとよいでしょう。
-
【C言語】strncmpライブラリ関数を使って2つの文字列を比較するプログラムの作り方
strncmpは、C言語のヘッダーファイル「string.h」に定義されている標準ライブラリ関数の一つです。この関数を使用すると、2つの文字列を比較し、どちらの文字列が大きい(辞書順で後ろにある)のかを判定することができます。 strcmp関数(文字列比較) strcmp関数は、2つの文字列を比較するための関数です。戻り値として、両方の文字列の中で最初に一致しなかった文字同士のASCIIコードの差を返します。 構文 int strcmp(string1, string2); 差が0の場合:string1 = string2(2つの文字列は等しい) 差が正の値の場合:string1 &
-
C++で2つの2進数文字列を加算するプログラムの書き方
2つの2進数を表す文字列が与えられたとき、それらを加算した結果を求め、その結果を2進数の文字列として返すことを考えます。2進数とは、0か1のいずれかで表現される数値のことです。2進数同士を足し合わせる際には、以下のような2進数特有の加算ルールに従う必要があります。0+0 → 0 0+1 → 1 1+0 → 1 1+1 → 0(繰り上がり1)入力例str1 = {11}, str2 = {1}出力例100入力例str1 = {110}, str2 = {1}出力例111問題を解くためのアプローチ両方の文字列を末尾(最下位桁)から走査する対応する桁の2進数同士を加算する1と1を足した場合は、その桁