Javaで文字列を長さで分割する方法

こんにちは、さるまりんです。

Stringクラスのsubstring()メソッドについてです。

文字列を最初なん文字とその後ろと分けたい時がありこのsubstring()メソッドを使うのですが、いつもどのように引数を指定すればいいのか迷うのでメモしておきます。

文字列中から一部分を取り出すのがsubstring()ですがこのメソッドには呼び出し方が二つあり、ドキュメントを見ると次のようにあります。

一つは

public String substring(int beginIndex)

です。beginIndex(開始インデックス)を指定して、その後ろを取得するというもの。

もう一つは

public String substring(int beginIndex, int endIndex)

です。こちらはbeginIndex(開始インデックス)とendIndex(終了インデックス)を指定してその間を取得するというもの。

一つ目はわかりやすくbeginIndexで指定したインデックスの文字から文字列の最後までが結果となります。が、二つ目がこんがらがらせてくれまして、beginIndexの扱いは変わらないのですが、endIndexは指定したインデックスの文字は含まずにendIndex-1のインデックスの文字までが結果に含まれます。

コードで示すとこんな感じです。

String str = "abcdef123456";

// str1はインデックス5(6-1)までで"abcdef"
String str1 = str.substring(0,6);

// str2はインデックス6からで"123456"
String str2 = str.substring(6);

見てみるといたって簡単なのですがなぜか覚えられなくて。。

後ろは最後のインデックス?インデックス-1?それとも長さ?のように混乱してしまうのです。

なので、メソッドにしておくと楽かなと思い書いてみました。

/**
 * 文字列を長さによって2つに分割します。
 */	
public static String[] splitByLength(String str, int length) {
	// 文字列がnullでなく、長さが指定されたlengthより長い?
	if (str != null && str.length() > length) {
		// 長い時は、lengthで分割して配列で返却
		return new String[] {str.substring(0, length), str.substring(length)};		
	} else {
		// そうでないときは、そのままの文字列とnullを配列で返却
		return new String[] {str, null};
	}
}

これで迷わなくて済みそうです。

読んでくださってありがとうござました。

それではまた!