分かりやすく解説!JavaでcompareToを使う方法【初心者向け】

初心者向けにJavaでcompareToの使い方について解説しています。compareToメソッドは文字列を比較する際に利用します。書き方も細かく記載しているので、実際にプログラムを書いて理解していきましょう。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

compareToメソッドの使い方を解説しています。

文字列の比較をするメソッドで同様のequalsメソッドとの違いについても触れているので、知っておくと良いでしょう。

Javaについてそもそもよく分からないという方は、Javaとは何なのか解説している記事をまずご覧ください。

 

なお本記事は、TechAcademyのJava講座の内容をもとに作成しています。

 

田島悠介

今回はcompareToを使ってみよう。

大石ゆかり

田島メンター!compareToは何をするんですか〜?

田島悠介

これは文字列を辞書式によって比較するんだ。詳しく見ていこう。

大石ゆかり

分かりました!

compareTo文について

compareTo文は文字列を比較するメソッドです。

メソッドとは、関数とも呼ばれ、よく使う機能をあらかじめ用意しておき、compareTo( )という形で呼び出すことで、簡単に利用することができる命令文のことです。

compareToメソッドは文字列を比較するメソッドですが、同じように文字列を比較するメソッドとして、equalsメソッドがあります。

equalsメソッドは文字列を単純に比較する機能を有しています。

 

これに対し、compareToメソッドは辞書式と言って、アルファベット順に文字列を比較することが可能です。この辞書式の比較はUnicodeという形式の文字コードで行っています。

compareToメソッドでの比較は、文字列自体を日本語の「ひらがな」か「カタカナ」のどちらかに限定することで、比較することができます。しかし、「ひらがな」「カタカナ」「英文字」を混在させてしまうとうまく比較ができません。

compareToメソッドは、大文字と小文字を区別して評価します。

大文字と小文字を無視して評価する場合は、compareTolgnoreCase( )メソッドを利用する事で処理が可能になります。

 

辞書式の評価方法

辞書式の文字列比較というのは、辞書で先に現れる場合は小さいと考え、辞書で後に現れる場合は大きいと考えます。

辞書で先に現れる例として、aはbより先に現れます。
辞書で後に現れる例として、bはaより後に現れます。

比較した結果、次の値を返します。
完全一致の場合は0を返します。
文字列1が文字列2より辞書式で小さい場合は0より小さい負の値を返します。
文字列1が文字列2より辞書式で大きい場合は0より大きい正の値を返します。
負の値の例としては-1です。正の値の例としては1です。

 

[PR] Javaで挫折しない学習方法を動画で公開中

compareToの書き方

次の書き方を使用することで、compareToを使用した辞書式の文字列比較を行う事が可能です。

文字列1.compareTo(文字列2)

次に、実際に文字列を比較してみます。

今回は、同様に文字列を比較するequalsメソッドを利用する書き方も一緒に示してみます。

 

equalsを使用して、String(文字列)型を比較する場合

実行結果:aとbは同じです。

String a = "Moji";
String b = "Moji";
if (a.equals(b))) {
  /* 実行結果:aとbは同じです。 */
  System.out.println("aとbは同じです。");
}

 

compareToを使用して、String(文字列)型を比較する場合

実行結果:aとbは同じです。

String a = "Moji";
String b = "Moji";
if (a.compareTo(b) == 0) {
  /* 実行結果:aとbは同じです。 */
  System.out.println("aとbは同じです。"); //実行結果:aとbは同じです。
}

 

田島悠介

compareToの基本形と、一致かどうかを調べてみた場合の例だね。

大石ゆかり

一致の場合は0になるので、こういう書き方になるんですね。

田島悠介

それでは実際にcompareToを使ってみよう。辞書での順番を比較して、それぞれの場合で別の処理を行うように設定するよ。

compareToを使用した例を実際に書いてみよう

今回は辞書式で先に現れる文字列かどうかを調べるプログラムを実装していきます。

辞書式で先に現れるかどうかというのは、辞書で調べたときに、辞書の1ページ目から考えて、先に記載されているかどうかという事を意味します。

実行結果:辞書で先に記載されている文字列は、apple

/* Jishoというclass名を作成して、Javaプログラミングを開始 */
public class Jisho {
  public static void main(String[] args) {
    /* 比較結果表示用の文字列 */
    String kekka = "辞書で先に記載されている文字列は、";
    /* 文字列1 */
    String moji1 = "apple";
    /* 文字列2 */
    String moji2 = "orange";
    /* 文字列比較 */
    if( moji1.compareTo(moji2) < 0 ) {
      /* 比較結果でmoji1の方が辞書式で先に現れる場合 */
      kekka = kekka + moji1;
    } else if ( moji1.compareTo(moji2) > 0 ) {
      /* 比較結果でmoji2の方が辞書式で先に現れる場合 */
      kekka = kekka + moji2;
    } else {
      /* moji1とmoji2が同じ場合 */
      kekka = moji1 + "と" + moji2 + "は同じ文字列です。";
    }
    /* 実行結果:辞書で先に記載されている文字列は、apple */
    System.out.println(kekka);
  }
}

今回は、appleを変数moji1に代入。orangeを変数moji2に代入して、compareToメソッドを利用して比較しました。

辞書では、appleの方がorangeよりも先に記載されているので、実行結果は、「辞書で先に記載されている文字列は、apple」となります。

 

今回は、compareToをを利用した辞書式で文字列を比較する方法でした。

入門向けJavaの学習サイトもまとめているので、合わせてご覧ください。

 

田島悠介

compareToで返ってきた値が0より大きいか小さいか、等しいかによって分けることができるんだ。

大石ゆかり

それによって変数moji1が先の場合、moji2が先の場合、両方同じだった場合を条件としたわけですね。

田島悠介

上で説明したように、文字列が一致するかどうかだけを調べる場合はequalsというのもあるんだ。一緒に覚えておこう。

大石ゆかり

了解です。ありがとうございました!

また、オンラインのプログラミングスクールTechAcademyでは、Java講座を開催しています。

JavaやServletの技術を使ってWebアプリケーションの開発を学ぶことができます。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間で習得することが可能です。