📖

Java 文字列を扱うクラス

2024/12/10に公開

Java

文字列を扱うクラス

  • Stringクラスとは、Javaで文字列を操作するクラス。
  • Stringクラスには、次のようなメソッドが定義されている。
メソッド メソッドの機能
equals 文字列が等しいか判定した結果を返す。
compareTo 文字列を比較して等しいか、大きいか、小さいか判定した結果を返す。
length 文字列の長さを返す。
substring 指定した位置の文字列を切り出して返す。
replace 文字列を置換し、置換後の文字列を返す。
split 指定した文字列で分割し、分割後の文字列を返す。
trim 文字列の先頭と末尾の空白と水平タブや改行を削除して返す。
  • 文字列が等しいか判定は、equals()メソッドでおこなう。
  • 文字列を比較する時に「等価演算子(==)」を使うと同じ文字列でも”false”になる場合があるので注意。等価演算子は文字列自体を比較しているわけではなく、2つのインスタンスの中身が同じかどうかを比較しているため、このようなことが発生する。

"equals()メソッド"のメモ

equals()メソッドで事前に”NULLエラー”を回避させることが可能な場合がある。
”NULL”の発生が想定されるもの(例えばプロンプト入力など)は右側に、”NULL”の発生が想定されないもの(初期化の行われている変数でそもそもNULLが入ってこないもの)を左側にしておくと”NULLエラー”を回避できる。
例えば、[初期化の行われている変数].equals(関数の返値)などのようにして、事前に”NULLエラー”を回避させることが可能な場合がある。
こうすることで、事前にIF文でNULL判定をおこなうコーでイングを省略できたり、try{}~catch{}のコーデングを省くことが可能になるというメリットがある。

CompareTo()

  • 文字列が同じかどうかはイコールメソッドがよく使われる。
  • 文字を昇順、降順にする場合、オブジェクトの比較で使用される場合が多い。
  • 特にリスト順で出力する際によく使用される。
判定結果 戻り値
文字列が等しい 0
比較元の文字列が比較先の文字列より大きい値 正の値
比較元の文字列が比較先の文字列より小さい値 負の値
package some.package;

public class String_Test2 {

   public static void main(String[] args) {
  	String moji1 = "かきく";
  	String moji2 = "かきく";
  	String moji3 = "あいう";
  	String moji4 = "さしす";

  	Integer val1 = 5;
	Integer val2 = 5;
	Integer val3 = 3;
	Integer val4 = 7;

	String moji5 = "ああああ";
	String moji6 = "あああ";
	String moji7 = "いいい";
	String moji8 = "いいいい";

  	//文字列を比較する場合
	System.out.println("文字列を比較する場合");
	System.out.println(moji1.compareTo(moji2));
	System.out.println(moji1.compareTo(moji3));
	System.out.println(moji1.compareTo(moji4));
  	 
	//数値を比較する場合
	System.out.println("数値を比較する場合");
	System.out.println(val1.compareTo(val2));
	System.out.println(val1.compareTo(val3));
	System.out.println(val1.compareTo(val4));

  	//文字数が異なる場合
	System.out.println("文字数が異なる場合");
	System.out.println(moji5.compareTo(moji6));
	System.out.println(moji7.compareTo(moji8));

   }

}
文字列を比較する場合
0
9
-10
数値を比較する場合
0
1
-1
文字数が異なる場合
1
-1
  • moji1とmoji2の文字列は共に"かきく"なので、moji1とmoji2の比較の結果は0が返される。
  • moji1の文字列は"かきく"だが、moji3の文字列は"あいう"である。50音順で考えると、"かきく"は"あいう"の後。このように、50音順で後の文字列を、前の文字列より大きい値であると言えるため、moji1とmoji3の比較の結果は正の値が返される。
  • moji1の文字列は"かきく"だが、moji4の文字列は"さしす"である。50音順で考えると、"かきく"は"さしす"の前。このように、50音順で前の文字列を、後の文字列より小さい値であると言えるため、moji1とmoji4の比較の結果は負の値が返される。
  • val1とval2の値は共に5であるため、val1とval2の比較の結果は0が返される。
  • val1の値は5だが、val3の値は3のため、val1はval3より大きい値であるため、val1とval3の比較の結果は正の値が返される。
  • val1の値は5だが、val4の値は7。val1はval4より小さい値のため、val1とval4の比較の結果は負の値が返される。
  • また、文字数が異なる場合は文字数の大小が比較の結果に影響する。moji5の文字列は"ああああ"と4文字だが、moji6の文字列は"あああ"と3文字である。この場合、moji5はmoji6より大きく、比較の結果は正の値が返される。
  • moji7の文字列は"いいい"と3文字だ、moji8の文字列は"いいいい"と4文字である。この場合、moji7はmoji8より小さく、比較の結果は負の値が返される。

substring()

  • 指定した位置の文字列を切り出して返す。
  • 開始位置のみ指定する方法と、終了位置も併せて指定する書式で呼べる。
  • 同じ文字が続く文字列へ適用する場合、違う文字を入れてテストするとわかりやすい。
用法 実行結果
substring(開始位置) 開始位置以降の文字列が切り出される。
substring(開始位置,終了位置) 開始位置から終了位置までの文字列が切り出される。

replace()

  • replaceAll()というのもある。
  • 個人情報を出力する場合に”****”で隠したい場合によく使用される。
  • エスケープシーケンスに注意する。”\”など。

split()

  • 文字列を引数で指定した区切り文字の正規表現にマッチする部分で分割したString配列を戻す。
  • 区切り文字の間に文字を含まない部分がある場合(コード例の,,)、その部分は長さ0の文字列となる。ただし、nullではない。
String str = "A,BC,,D";
String[] split = str.split(",");
System.out.println(Arrays.toString(split)); // → ["A", "BC", "", "D"]
System.out.println(split .length); // → 4
["A", "BC", "", "D"]
4
  • 文字列が区切り文字を含まない場合は、文字列がそのまま設定された、長さ1のString配列が戻る。
String str = "A,BC,,D";
String[] split = str.split("あ");
System.out.println(Arrays.toString(split)); // → ["A,BC,,D"] ※配列のインデックス0にそのまま入っている。
System.out.println(split.length); // → 1
["A,BC,,D"]
1

trim()

  • trim()は、文字列の先頭と末尾の空白を削除して返す。
  • 文字列の先頭と末尾にある水平タブや改行のように不要なものも削除する。
  • 文字列の間の空白と、水平タブや改行は削除されない。
  • エスケープシーケンスには次のような種類が存在する。
エスケープシーケンス 意味
\n 改行
\t 水平タブ
\b バックスペース
\f 改ページ
\’ シングルクォーテーション
" ダブルクォーテーション

Discussion