.net column

.NET開発者のためのブログメディア

JavaのStringクラスとは?基本的な利用方法について紹介

2020年05月19日

SE
JavaのStringクラスとは、どのように利用するのでしょうか?

PM
今回は、基本的な操作方法から解説していきましょう。

javaでのstringクラスの利用方法について

stringクラスとは、文字列操作に便利な機能を沢山保有しているクラスのこと。javaで文字列を扱う場合は、このstringクラスの機能を利用することになります。今回はそんなstringクラスについての解説と、基本的な利用方法をご紹介していきます。

Stringクラスとは?

stringクラスとは、文字列を扱うために実装されているクラスです。java.lang内に実装されているクラスのため、importをすることなく利用可能となっています。Javaプログラム上のリテラル文字列は全てstringクラスのインスタンスとして実行されることになります。リテラル文字列とは、ダブルクォーテーションで囲まれた、プログラムを実行する際に機械語に変換されない文字列のことであり、プログラム上で利用される””abc””や””あいう””のことを指します。そのため、stringクラスはnew演算子を使わなくてもオブジェクトを生成することが可能になっています。例えば、以下のようなコードはエラーになりません。String str = “”abc””;通常、クラスからオブジェクトを作る場合はnew演算子を利用しなければなりません。しかしダブルクォーテーションで囲まれた文字列は、コンパイラによって文字列オブジェクトとして自動で認識されるため、new演算子を利用しなくても生成することが可能なのです。もちろん、new演算子を利用して下記のようにstringクラスのオブジェクトを生成することもできます。String str = new String(“”abc””);

Stringクラスの利用方法

stringクラスには、多くの便利なメソッドが用意されています。その中でも基本的なメソッドを4つご紹介します。基本的に利用されているのは、以下の機能をもったメソッドです。・2つの文字列が同一かどうかを比較する・文字列の長さを取得する・文字列の中に指定する文字列がどの位置にあるかを検索する・文字列が空かどうかを調べるこれらのメソッドについて、コードを交えながらご紹介していきます。

2つの文字列が同一かどうかを比較する

javaで2つの文字列を比較する際に利用されるのが「equals」というメソッドになります。このメソッドを利用すると、同一の場合はtrue、異なる場合はfalseが返されます。つまり==と同様の機能を持っているのですが、javaで文字列を比較する際に==は利用してはいけないことになっています。なぜ利用してはいけないのかについては後ほど解説します。では、2つの文字列を比較するコードを確認していきましょう。public class Main { public static void main(String[] args) { String test1 = “”あいうえお””; String test2 = “”あいうえお””; String test3 = “”かきくけこ””; // test1とtest2の比較 if (test1.equals(test2)) { System.out.println(“”test1とtest2に格納されている文字列は同じです。””); } else { System.out.println(“”test1とtest2に格納されている文字列は異なります。””); } // test1とtest3の比較 if (test1.equals(test3)) { System.out.println(“”test1とtest3に格納されている文字列は同じです。””); } else { System.out.println(“”test1とtest3に格納されている文字列は異なります。””); } }}実行結果test1とtest2に格納されている文字列は同じです。test1とtest3に格納されている文字列は異なります。このように、文字列の内容が同一の場合はtrue、異なる場合はfalseが返ってきます。

==とequalsの違いについて

文字列の比較をする場合、javaでは==は正しく機能しない場合があります。そのため、==を利用することは推奨されていません。これは実際にコードを実行してみると確認することができます。public class Main { public static void main(String[] args) { String test1 = “”あいうえお””; String test2 = new String(“”あいうえお””); // ==で比較を行った場合 if (test1 == test2) { System.out.println(“”test1とtest2に格納されている文字列は同じです。””); } else { System.out.println(“”test1とtest2に格納されている文字列は異なります。””); } // equalsで比較を行った場合 if (test1.equals(test2)) { System.out.println(“”test1とtest2に格納されている文字列は同じです。””); } else { System.out.println(“”test1とtest2に格納されている文字列は異なります。””); } }}実行結果test1とtest2に格納されている文字列は異なります。test1とtest2に格納されている文字列は同じです。同じ文字列を比較しているのに、結果が異なってしまっています。なぜこのようなことが起こるのかというと、最初の変数の宣言部分がポイントになってきます。これはJavaでのstringが、プリミティブ型ではなくクラスだということが関係してきます。プリミティブ型変数では、変数の中には値が直接格納されます。しかしながら、クラスを利用した変数は参照型変数と呼ばれるものになり、変数の中には値が格納されるのではなく、その値を保存している場所の住所が格納されているのです。==は変数の中身を直接比較します。違う宣言方法をした変数の中にはそれぞれ違う住所が格納されている為、異なっているという結果になってしまうのです。このような事態を防ぐためにも、文字列同士の比較をする場合はequalsメソッドを利用して比較するようにしましょう。

文字列の長さを取得する

文字列の長さを取得したい場合は、javaではlengthメソッドを利用します。lengthメソッドを利用すると、int型で文字数が返されます。実際のコードを見ながら確認してみましょう。public class Main { public static void main(String[] args) { String test1 = “”abc””; String test2 = “”あいうえお””; System.out.println(“”test1の文字数:”” + test1.length()); System.out.println(“”test2の文字数:”” + test2.length()); }}実行結果test1の文字数:3test2の文字数:5このように、半角でも全角でも同様に文字数がカウントされます。

指定する文字列がどの位置にあるかを検索する

文字列の中に、指定する文字列がどの位置にあるかを検索したい場合はindexOfメソッドを利用します。これは、例えば文字列””あいうえお””の中に、””う””がどの位置にあるのかを検索してくれるメソッドとなります。見つかった場合は、先頭を0とした場合の番号が返ってきます。見つからなかった場合は「-1」が返ってきます。つまり、””あいうえお””の中から””う””を探した場合は、「2」が返ってきます。以下のコードで確認してみましょう。public class Main { public static void main(String[] args) { String test1 = “”あいうえお””; String test2 = “”aiueo””; System.out.println(“”test1の「う」の位置を検索する:”” + test1.indexOf(“”う””)); System.out.println(“”test2の「う」の位置を検索する:”” + test2.indexOf(“”う””)); }}実行結果test1の「う」の位置を検索する:2test2の「う」の位置を検索する:-1

文字列が空かどうかを調べる

文字列が空かどうかを確認したい場合は、isEmptyメソッドを利用します。空の場合はtrue、空ではない場合はfalseが返ってきます。それでは、実際にどのように利用するのか、以下のコードで確認しましょう。public class Main { public static void main(String[] args) { String test1 = “”””; String test2 = “”abc””; System.out.println(“”test1が空かどうか:”” + test1.isEmpty()); System.out.println(“”test2が空かどうか:”” + test2.isEmpty()); }}実行結果test1が空かどうか:truetest2が空かどうか:falseここで注意していただきたいのは、空文字とnullは異なるということです。空文字とは””””のような、オブジェクトは存在しているが文字が入っていない状態のことであり、nullはそもそもオブジェクトが存在していない状態のことを指します。isEmptyでは空文字かどうかを判定できますが、nullは判定できないばかりか、NullPointerExceptionが発生します。以下のコードで確認してみましょう。public class Main { public static void main(String[] args) { String test = null; System.out.println(“”testが空かどうか:”” + test.isEmpty()); }}実行結果Exception in thread “”main”” java.lang.NullPointerException at Main.main(Main.java:4)この為、nullが含まれる可能性がある場合は、先にifなどを利用してnullではないことを確認してから実行する必要があります。public class Main { public static void main(String[] args) { String test = null; // 先にnullかどうかを判定する if (test != null) { System.out.println(“”testが空かどうか:”” + test.isEmpty()); } else { System.out.println(“”testはnull””); } }}実行結果testはnullこのように、nullが含まれる可能性のある文字列は、isEmptyメソッドでいきなり判定しないようにしましょう。

SE
JavaのStringクラスは、さまざまなことができるのですね。

PM
そうですね。しかし、他のデータ型とは違った処理をしなければならないこともあるので、使い方には充分注意しましょう。

stringを便利に使いこなそう

stringはjavaの中でも多く利用されるデータ型です。しかし、javaでのstringはプリミティブ型ではなくクラスのため、他のデータ型とは違った処理をしなければならない箇所が多くあります。しかしながら、クラスであるために便利なメソッドが多く利用できるようになっています。JavaDocを確認しながら、stringを便利に使いこなしていきましょう。


.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

求人一覧

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)