Javaで文字列を扱うときには、Stringクラスを使用します。
String name = "田中";
String message = "こんにちは";
これまでの基礎編でも、String型の変数を使って文字列を扱ってきました。
Stringは、文字列を管理するためのクラスです。文字列の長さを調べたり、一部を取り出したり、特定の文字が含まれているかを確認したりできます。
今回は、実際のプログラムでよく使うStringのメソッドを学習しましょう。
文字列の長さを調べるには、length()メソッドを使用します。
String name = "Java";
System.out.println(name.length());
4
「Java」は4文字なので、結果は4になります。
日本語の文字列でも確認してみましょう。
String message = "こんにちは";
System.out.println(message.length());
5
JavaのStringでは、length()は文字列のUTF-16コード単位の数を返します。一般的な日本語や英数字の文字列では、文字数を確認する用途で利用できます。
なお、配列のlengthとStringのlength()は書き方が異なります。
2つの文字列が同じ内容かどうかを確認するには、equals()メソッドを使用します。
String name1 = "Java";
String name2 = "Java";
System.out.println(name1.equals(name2));
true
文字列の内容が同じなので、trueが返されます。
次の例も確認してみましょう。
String name1 = "Java";
String name2 = "Python";
System.out.println(name1.equals(name2));
false
文字列の内容が異なるため、falseが返されます。
Javaで文字列を比較するときに、特に注意したいのが==とequals()の違いです。
例えば、次のコードを見てみましょう。
String name1 = new String("Java");
String name2 = new String("Java");
System.out.println(name1 == name2);
System.out.println(name1.equals(name2));
false
true
new String(“Java”)を2回実行しているため、別々のStringオブジェクトが作られています。
そのため、参照を比較する==ではfalseになります。
一方、文字列の内容は同じなので、equals()ではtrueになります。
文字列の内容を比較したい場合は、基本的にequals()を使うと覚えておきましょう。
文字列の一部を取り出すには、substring()メソッドを使用します。
String text = "Programming";
System.out.println(text.substring(0, 7));
Program
substring(0, 7)では、開始位置0から、終了位置7の直前までを取り出します。
文字列の位置は0から始まります。
文字: P r o g r a m m i n g
位置: 0 1 2 3 4 5 6 7 8 9 10
終了位置の文字は含まれないため、substring(0, 7)では位置0から位置6までの文字が取り出されます。
開始位置だけを指定することもできます。
String text = "Programming";
System.out.println(text.substring(7));
ming
substring(7)では、位置7から文字列の最後までを取り出します。
ある文字列の中に、特定の文字列が含まれているかを確認するには、contains()メソッドを使用します。
String message = "Javaを勉強しています。";
System.out.println(message.contains("Java"));
System.out.println(message.contains("Python"));
true
false
「Java」は含まれているためtrue、「Python」は含まれていないためfalseになります。
contains()は、大文字と小文字を区別します。
指定した文字や文字列が、最初に現れる位置を調べるには、indexOf()メソッドを使用します。
String text = "Java Programming";
System.out.println(text.indexOf("Java"));
System.out.println(text.indexOf("Program"));
System.out.println(text.indexOf("Python"));
0
5
-1
検索した文字列が見つかった場合は、その開始位置が返されます。
見つからない場合は、-1が返されます。
contains()が「含まれているかどうか」を調べるのに対して、indexOf()は「どこにあるか」を調べるために利用できます。
文字列の一部を置き換えるには、replace()メソッドを使用します。
String message = "Javaは難しいです。";
String newMessage = message.replace("難しい", "楽しい");
System.out.println(newMessage);
Javaは楽しいです。
replace()では、置き換えたい文字列と、新しい文字列を指定します。
ここで注意したいのは、Stringは不変(immutable)のオブジェクトだということです。
replace()を実行しても、元のmessage自体が変更されるわけではありません。置き換えた結果の文字列が返されます。
String message = "Javaは難しいです。";
message.replace("難しい", "楽しい");
System.out.println(message);
Javaは難しいです。
置き換えた結果を利用したい場合は、戻り値を変数に代入するなどして受け取ります。
英字を大文字や小文字に変換したい場合は、次のメソッドを使用します。
String text = "Java";
System.out.println(text.toUpperCase());
System.out.println(text.toLowerCase());
JAVA
java
これらのメソッドも、元の文字列を直接変更するのではなく、変換した文字列を返します。
文字列の内容を比較したい場合は、基本的にequals()を使用します。
substring(開始位置, 終了位置)では、終了位置の文字は含まれません。
Stringは不変なので、置き換えた結果を利用するには、戻り値を受け取る必要があります。
検索した文字列が見つからない場合、indexOf()は-1を返します。
Stringのメソッドを使いこなせると、入力された文字列の確認や、文章の加工などを行いやすくなります。
次回は、Javaで日付や時刻を扱うための日付・時刻APIについて学習します。