Java substringを使って文字列の一部を取得する方法 - Stringクラス

Javaでsubstringを使って文字列の一部を取得する方法です。

Javaで文字列から一部分を取り出すためには substring を利用します。取得部分の指定はインデックス番号で指定します。文字列が null の場合には、NullPointerException が発生しますので注意が必要です。

ここでは Javaでsubstringを使って文字列の一部を取得する方法を解説 します。


Java substringの仕様

APIドキュメントには以下のように記載があります。

substring
public String substring(int beginIndex,int endIndex)

この文字列の部分文字列である新しい文字列を返します。
部分文字列は、指定された beginIndex から始まり、インデックス endIndex - 1 にある文字までです。
したがって、部分文字列の長さは endIndex-beginIndex になります。
例:
"hamburger".substring(4, 8) returns "urge"
"smiles".substring(1, 5) returns "mile"
パラメータ:
beginIndex - 開始インデックス (この値を含む)
endIndex - 終了インデックス (この値を含まない)
戻り値:
指定された部分文字列
例外:
IndexOutOfBoundsException - beginIndex が負の値である場合、endIndex がこの String オブジェクトの長さより大きい場合、あるいは beginIndex が endIndex より大きい場合

インデックスって?

インデックスとは下記のようなイメージと思ってください。インデックスは、0 から始まります。

"saka-en"という文字列のインデックス

例として "saka-en" という文字列のインデックスは下記のようになります。
  • インデックス 0 ⇒ s
  • インデックス 1 ⇒ a
  • インデックス 2 ⇒ k
  • インデックス 3 ⇒ a
  • インデックス 4 ⇒ -
  • インデックス 5 ⇒ e
  • インデックス 6 ⇒ n

"サカエン"という文字列のインデックス

例として "サカエン" という文字列のインデックスは下記のようになります。

  • インデックス 0 ⇒
  • インデックス 1 ⇒
  • インデックス 2 ⇒
  • インデックス 3 ⇒

インデックスは「半角文字」であっても「全角文字」であっても、1 文字に対して 1 つずつ増加します。

サンプルソースとテスト

ではサンプルコードを書いてテストしてみましょう。

  1. "saka-en"という文字列から "ka" を取得する。
  2. "サカエン"という文字列から "カ" を取得する。

System.out.println("saka-en".substring(2,3));
System.out.println("サカエン".substring(1,2));

結果を確認する

結果はこうなります。


k
カ

しかし、値が必ず保障されている場合はいいのですが、別のメソッドを呼び出して、null が戻るケースがある場合には注意が必要です。この場合 NullPointerException が発生します。

例えばこんなケースです。


public static void main(String[] args) {
  String substr = substr();
  System.out.println(substr.substring(1,2));
}
private static String substr() {
  return null;
}

これは極端な例ですが、可能性がある場合は注意が必要です。

NullPointerException を回避するために、StringUtils などのユーティリティクラスを用意し、その中にこんな感じのメソッドを用意するとよいでしょう。

ユーティリティクラスにメソッドを作る


/**
 * この文字列の部分文字列である新しい文字列を返します。<br />
 * 対象文字列が null の場合は、空文字列を返します。
 *
 * @param value 対象文字列
 * @param beginIndex 開始インデックス (この値を含む)
 * @param endIndex 終了インデックス (この値を含まない)
 * @return 指定された部分文字列
 */
private static String substring(String value, int beginIndex, int endIndex) {
	if ( value != null )
		return value.substring(beginIndex, endIndex);
	else
		return "";
}

対象文字列が null の場合は、空文字列を返します。これにより NullPointerException を回避できます。

先ほどのソースを直すとこんな感じになります。


public static void main(String[] args) {
  String substr = substr();
  System.out.println(StringUtils.substring(substr,1,2));
}
private static String substr() {
  return null;
}

ふむ、いい感じ^^

まとめ

おつかれさまでした。

この記事がお役に立ちましたら シェア をお願いいたします。