JavaのStringクラス(文字列型)の基本的な使い方
文字列の操作は頻繁に使用するメソッドなので、文字列の表示の仕方と同時に、基本的な記法を学習していきましょう。
文字列の操作は頻繁に使用するメソッドなので、文字列の表示の仕方と同時に、基本的な記法を学習していきましょう。
スキルアップ
2022/03/07 UP
- プログラミング
- SE資格・スキル
- Java
String(文字列型)は、文字列を処理するためのクラスです。文字列を結合、分割したり、特定の文字が文字列に含まれているかどうかを検索したり、文字列の操作に関するメソッドが用意されています。
文字列の操作は頻繁に使用するメソッドなので、文字列の表示の仕方と同時に、基本的な記法を学習していきましょう。
Stringクラスとは?特徴や基本の書き方
Javaの文字列は、Stringクラスのインスタンスです。文字列は、複数の文字の集まりをダブルクオーテーション(")で囲って記述します。
文字を扱うにはStringとcharがありますが、Stringはクラスでcharはデータ型という違いがあります。それでは、実際に文字列を記述する方法を見てみましょう。
文字列の書き方
文字列は「String 変数名 = “文字列リテラル”」の形で記述します。実際のコードでは、以下のように表記します。
サンプルコード:
String str = "Hello World";
また、Stringクラスはたくさんのコンストラクタを持っています。コンストラクタとはインスタンス生成時に実行されるメソッドのことです。Stringクラスではコンストラクタを使う事で、文字列のデータをさまざまな方法で加工したり、新しいStringオブジェクトを構築できます。
StringとCharの違い
前述の通り、Javaで文字を扱うには2つの変数がありますが、Stringはクラス型で、charはデータ型という違いがあります。
また、Stringは変数として複数の文字列を表すことができますが、charは1つの文字の16ビット(2バイト)の整数を格納している違いがあります。この違いがあるため、charには文字コードを直接入力できますが、Stringにはできません。
charからStringに変換するにはvalueOfメソッド 、Stringからcharへ変換するにはtoCharArrayメソッド を使用します。
実際に変換しているサンプルを見てみましょう。まずchar型で定義した変数c1をvalueOfメソッドで変数Str1に変換しています。次に、char型の配列c2を結合し、変数str2に代入しています。
最後に、変数str3をtoCharArray で1文字ずつ分解し、配列c4として出力しています。
サンプルコード:
public class Main {
public static void main(String[] args) {
char c1 = 'あ';
String str1 = String.valueOf(c1);
System.out.println("str1= " + str1);
char[] c2= { 'あ', 'い', 'う', 'え', 'お' };
String str2 = new String(c2);
System.out.println("str2= " + str2);
String str3 = "あいうえお";
char[] c3 = str3.toCharArray();
for(char c4 : c3) {
System.out.println("c4= " + c4);
}
}
}
このサンプルを実行すると以下のように表示されます。
charとstringの変換は実務でもしばしば行われるので、変換方法と使用メソッドについて理解を深めておくと良いでしょう。
Stringクラスの基本的な使い方と文字列操作
それでは、文字列の基本的な操作について、実際にサンプルコードを見ながら学習していきましょう。
今回解説している操作は、Javaの学習を始めたばかりの方に向けた基礎的なものに限られます。String型は多くのメソッドを持っているので、基本的な使い方に慣れてきたら、さらに進んだメソッドを使えるように学習を進めましょう。
文字列を作る
Stringクラスのインスタンスの宣言と初期化は、前項で解説した通り、「String 変数名 = “文字列リテラル”」で記述します。
実際のサンプルコードを見てみましょう。今回はプログラミング言語を初めて触れる時の基本、「Hello World」を表示しています。
サンプルコード:
public class main {
public static void main(String[] args) {
String str01 = "こんにちは";
String str02 = "hello world!";
System.out.println(str01);
System.out.println(str02);
}
}
このサンプルを実行すると以下のように表示されます。
文字列を結合する
2つの文字列を結合して1つの文字列を新しく作るには、StringBuilder クラスのappendメソッドを使用します。
StringBuilderクラスを使用するには「StringBuilder str = new StringBuilder();」で新しいStringBuilderオブジェクトを作成し、先頭から順番に文字列を追加していきます。また、オブジェクトの作成時に初期化できるので、文字列を最初から挿入しておくことができます。
それではサンプルコードを見てみましょう。以下のサンプルでは、変数strに代入された「Hello」に、str.appendで「world!!」を追加しています。
サンプルコード:
public class main {
public static void main(String[] args) {
StringBuilder str = new StringBuilder("Hello");
str.append("World!!");
System.out.println(str.toString());
System.out.println(str.append("ハローワールド!"));
}
}
このサンプルを実行すると以下のように表示されます。
文字列を分割する
文字列を指定した部分で分割し、配列の要素として格納するには、splitメソッドを使用します。splitメソッドを使用するには「String[] 変数名.split("区切り文字", 分割後の配列の要素数)」のように記述します。
区切り文字は正規表現で記述する必要があります。また、要素数は省略することができます。省略すると、配列の要素数に制限がなくなります。
実際のサンプルコードを見てみましょう。このサンプルでは、4つの挨拶が「,」で区切られた文字列が変数strに代入されています。これをsplitメソッドで「,」ごとに分割し、配列aisatsuに格納します。
サンプルコード:
public class main {
public static void main(String[] args) {
String str = "こんにちは,hello,おはようございます,good morning";
String[] aisatsu = str.split(",", 0);
for (String hello : aisatsu) {
System.out.println(hello);
}
}
}
このサンプルを実行すると以下のように表示されます。
文字列を反転させる
文字列に格納されている文字の順番を反転させ、新しい文字列を作るには、StringBuilder クラスのreverseメソッドを使用します。前項で解説したappendメソッドと同様に、「StringBuilder str = new StringBuilder();」で新しいStringBuilderオブジェクトを作成し、反転した文字列を格納します。
サンプルでは、文字列str01を新しいオブジェクトstr02に格納し、reverseメソッドで文字順を反転したものを文字列str03に代入して表示しています。
サンプルコード:
public class main {
public static void main(String[] args) {
String str01 = "Hello World";
System.out.println(str01);
StringBuilder str02 = new StringBuilder(str01);
String str03 = str02.reverse().toString();
System.out.println(str03);
}
}
サンプルを実行すると以下のように表示されます。
文字列から空白を削除する
文字列の先頭と末尾から空白やタブ、改行を削除するには、trimメソッドを使用します。注意点として、全角スペースは削除されません。
public class main {
public static void main(String[] args) {
String str01 = " abc defg ";
String str02 = str01.trim();
System.out.println(str02);
}
}
サンプルを実行すると以下のように表示されます。文字列の前後にあったスペースがすべて削除されているのがわかります。
文字列の長さを取得する
文字列の長さを取得するにはlengthメソッド使用します。1バイト文字でも2バイト文字でも、int型の値が戻ってきます。
サンプルコード:
public class main {
public static void main(String[] args) {
String str01 = new String("こんにちは、世界の始まりです。");
String str02 = new String("Hello New World!! Welcom to Java World!");
System.out.println("「" + str01 + "」は" + str01.length() + "文字でした。" );
System.out.println("「" + str02 + "」は" + str02.length() + "文字でした。" );
}
}
このサンプルを実行すると以下のように表示されます。
指定した文字列のインデックスを検索する
指定した文字列のインデックスを探すにはindexOfメソッドを使用します。指定した文字列が最初に出現する位置のindexを戻り値として返します。また、指定した文字列が見つからない場合は-1が返されます。
indexOfメソッドには、char型とStringで検索できるほか、指定したインデックスより後方を検索する方法や、最後に出現するインデックスを取得する方法があります。
今回のサンプルは、Stringで文字列の先頭から指定した文字列を検索しています。
サンプルコード:
public class main {
public static void main(String[] args) {
String str01 = "こんにちは";
String str02 = "Hello World";
System.out.println("str01から最初の「に」のインデックスを探す:" + str01.indexOf("に"));
System.out.println("str02から最初の「o」のインデックスを探す:" + str02.indexOf("o"));
}
}
このサンプルを実行すると以下のように表示されます。
文字列同士を比較する
文字列の内容を比較し、内容が同一か否かを判定するにはequalsメソッドを使用します。equalsメソッドの基本的な書き方は「文字列1.equals(文字列2)」です。文字列1が参照元、文字列2が比較対象になります。
以下のサンプルでは、文字列str01と文字列str02を比較し、内容の一致を確認しています。
サンプルコード:
public class main {
public static void main(String[] args) {
String str01 = "あいうえお";
String str02 = "あいう";
if (str01.equals(str02)){
System.out.println("2つの文字列は同一です");
}
else{
System.out.println("2つの文字列は同一ではありません");
}
}
}
このサンプルを実行すると以下のように表示されます。
Stringを扱う上で気を付けたいポイント
Javaは型付けが非常に厳格な言語です。特にStringは扱いが難しく、基本型に分類されていますが、挙動は実質参照型です。
Stringは文字列の内容を判定するなどの参照はできますが、自身の文字列を変更できません。そのため、文字列の内容を変更する場合は、新しいStringクラスを作成して書き換える必要があります。
また、JavaのStringクラスにおいては、nullと文字数0は明確に別のものとして扱われています。nullはStringのインスタンスをそもそも指していません。一方、文字数が0のStringは、インスタンスを指していますが文字数が0の文字列であるという扱いです。
nullなのか文字数が0の空白の文字列なのかを明確に線引きし、定義しないと、バグの原因になってしまうので注意しましょう。
文字列の操作は実務で多用するので身につけておこう
StringクラスはJavaの基礎的な部分であり、文字列が自在に扱えるようになるとアプリケーションの構築が格段に楽になります。実務上でも文字列の操作は使用頻度が高く、多くのメソッドを使いこなす必要があるので、まずは基本的な操作を覚えたら、応用的なメソッドを学習すると、より理解が深まるでしょう。