Javaプログラムの中で頻繁に利用されるString(文字列)の説明です。
Stringは基本データ型ではなくクラスに分類されます。
もくじ
Stringクラスの概要
Stringクラスは文字列を扱うためのクラスです。基本データ型ではない為、型は頭文字が大文字になっています。
Stringはクラスとなっていますので、メソッドやフィールドといったメンバも持っています。また、文字列は頻繁に利用される為、他のクラスにはない特徴もあります。
Stringクラスはメソッド一覧は以下のURLを参照してください。
https://docs.oracle.com/javase/jp/8/docs/api/
Stringクラスの特徴
Stringクラスの特徴を箇条書きにして紹介します。
- java.langパッケージのクラスでimportが不要
- “”はString型のインスタンスとなる
- 2の理由から、==の代入演算での比較はインスタンスの比較となる為、文字列比較はequals()メソッドで行う
- Stringの文字列は定数となっており、別の文字列を扱うと別インスタンスが生成される
- 3の理由から文字列の変更を行う際は、「StringBuffer」や「StringBuilder」といったクラスを利用する
Stringクラスの特徴をプログラムで確認
以下のプログラムを「Number43.java」という名前でWorkフォルダ内に保存します。
保存が完了したら、コマンドプロンプトを起動し、Number43.javaをコンパイルしてみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
//本来はimport不要 import java.lang.String; class Number43{ public static void main(String[] args){ //""はString型のインスタンスとなる為、メソッドも利用できる System.out.println("javaru".equals("JAVARU")); //==ではインスタンス比較となる為、`エラーにはならない`が文字列比較とはならない System.out.println("プログラム" == "プログラム"); //例えば、以下は文字列が同じでもfalseとなる System.out.println(args[0] == "javaru"); //コマンドライン引数で"javaru"と入力 } } |
実行例
C:\work>javac Number43.java
C:\work>java Number43 javaru
false
true
false
※実行例はコンパイルおよび実行時の例を表示しています。
Stringクラスのコンストラクタを利用する
Stringはクラスなので、コンストラクタを使ってインスタンスを生成することもできます。コンストラクタを利用して変数を作成すると、同じ文字列でも別インスタンスとして扱われます。
Stringクラスのコンストラクタを利用する | String インスタンス変数名 = new String(“文字列”) ; |
---|---|
記述例 | String str = new String(“javaru”) ; |
Stringクラスのメソッドを利用する
Stringは文字列を扱うクラスの為、メソッドは文字列に関する処理を行うことができます。しかし、前述したとおりStringは文字列の編集を行うメソッドは用意されていません。
以下の表はStringクラスにおけるメソッドの一部です。ほかにもたくさんのメソッドがあるので、APIドキュメントで確認してみてください。
メソッド名 | 戻り値の型 | 引数 | 処理内容 |
---|---|---|---|
equals | boolean | String str | 自身の文字列と引数の文字列を比較してboolean型として返す。 |
charAt | char | int index | 引数で指定された数値(インデックス)の文字のみをchar型の文字として返す。 |
indexOf | int | String str | 引数で指定された文字列を検索し、文字列が見つかった場合は数値(インデックス)として返す。見つからなかった場合の戻り値は-1となる。 引数と同じ文字列が複数見つかった場合は、最初に見つかった数値となる。 |
substring | String | int biginIndex | 引数で指定された数値から最後の文字列までを切り取って、戻り値として返す。 |
substring | String | int biginIndex, int lastIndex | 第一引数の数値から第二引数の数値までの文字列を切り取って、戻り値として返す。 |
length | int | なし | 文字数を返す。 |
Stringのメソッド サンプルプログラム
以下のプログラムを「Number44.java」という名前でWorkフォルダ内に保存します。
保存が完了したら、コマンドプロンプトを起動し、Number44.javaをコンパイルしてみましょう。※プログラムが長いため、必要に応じてコピペで確認してください
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
class Number44{ public static void main(String[] args){ String url = "https://it-level-up.club"; String text = "基本データ型にはchar,byte,short,int,long,float,double,booleanがあります。"; /* equals()メソッド 文字列A.equals(文字列B) 文字列Aと文字列Bを比較してboolean型を返す。 */ System.out.println("[equals()メソッド]"); System.out.println(url.equals("https://it-level-up.com")); /* charAt()メソッド 文字列A.charAt(インデックス) 文字列Aのインデックス値にある文字を戻り値として返す。 1文字目のインデックス値は0になる為、下記の例は4文字目が出力される。 */ System.out.println("[charAt()メソッド]"); System.out.println(url.charAt(3)); /* indexOf()メソッド 文字列A.indexOf(文字列B) 文字列Aの中から文字列Bを検索し、インデックス値を返す。 1文字目のインデックス値は0になる為、下記の例では0が出力される。 */ System.out.println("[indexOf()メソッド]"); System.out.println(url.indexOf("https")); //見つからない場合の戻り値は-1となる System.out.println(url.indexOf("test")); /* substring()メソッド 文字列A.substring(インデックス) 文字列Aの中からインデックスから最終文字列まで切り取って返す。 文字列A.substring(開始インデックス,終了インデックス) 引数が2つの場合は開始インデックスから 終了インデックスまでの文字列を切り取って返す。 */ System.out.println("[substring()メソッド]"); System.out.println(text.substring(8)); System.out.println(text.substring(8,12)); /* length()メソッド 文字列A.length() 文字列Aの文字数を返す。 */ System.out.println("[length()メソッド]"); System.out.println(text.length()); } } |
実行例
C:\work>javac Number44.java
C:\work>java Number44
[equals()メソッド]
false
[charAt()メソッド]
p
[indexOf()メソッド]
0
-1
[substring()メソッド]
char,byte,short,int,long,float,double,booleanがあります。
char
[length()メソッド]
59
補足 substring()メソッドのインデックス
substring()メソッドのインデックスは以下のようにイメージすると分かりやすいかもしれません。
例えば、基本という部分を取得する場合は「substring(5,7)」と指定します。イメージは以下のようになります。
さらに、Javaという部分を取得する場合は「substring(0,4)」と指定します。イメージは以下のようになります。
String 復習問題
- 以下のプログラムはどのように表示されるか選んでください。
12String str = new String("test");System.out.println(str == "test"); - 解答群
- true
- false
- test
- null
- 文字数を取得できるメソッドの名称として正しいものを選んでください。
- 解答群
- length
- size
- number
- indexOf
- “abcdefg”という文字列(”は含めない)からdefという文字列を取得する際の記述として正しいものを選んでください。
- 解答群
- “abcdefg”.substring(4,6)
- “abcdefg”.substring(3,7)
- “abcdefg”.substring(3,6)
- “abcdefg”.substring(4,7)
- indexOf()メソッドを利用した際、検索文字列が見つからなかった場合の戻り値として正しいものを選んでください。
- 解答群
- 0
- 1
- -1
- false
- お疲れ様でした。
まとめ
- Stringはクラス
- 文字列比較の際はequals()メソッドを利用する
- 文字列に関する様々なメソッドを利用できる
- charAt()は一文字だけを取得できる
- indexOf()で文字列検索が可能
- substring()は文字列の一部を取得できる
- length()は文字数が取得できる