文字列操作でしばしば使われるのがsplitだ。
今回は代表的なsplitの使用例を見ながら使い方をマスターしていきたい。

りんご,みかん,ばなな

という文字列があった場合、このそれぞれをデータとして扱いたい場合にはどうすればよいだろうか?

String str="りんご,みかん,ばなな";
String[] data=str.split(",");

としてあげればよい。カンマ記号で分割されそれを要素とした配列を生成してくれる。

上記の場合

data[0] //りんご
data[1] //みかん
data[2] //ばなな

という要素を持つ配列が生成される。

分割に指定する文字は何でもよい
「と」で分割

String str="さるといぬときじ";
String[] data=str.split("と");
data[0] //さる
data[1] //いぬ
data[2] //きじ

「and」で分割

String str="さるandいぬandきじ";
String[] data=str.split("and");
data[0] //さる
data[1] //いぬ
data[2] //きじ

ではこの場合はどうだろう?
間にカンマが並んでいる部分がある。

String str="りんご,みかん,,ばなな";
String[] data=str.split(",");

空の文字列として解釈される。

data.length //4
data[0] //りんご
data[1] //みかん
data[2] //""
data[3] //ばなな

○上限の分割数の指定
第二引数で分割数の上限を指定することもできる。

String str="りんご,みかん,ばなな";
String[] data=str.split(",",2);

上記の場合

data[0] //りんご
data[1] //みかん,ばなな

1つ目を通常通り要素としたあと、残り全部を2つ目の要素としている。

以上でsplitの基本はOKだ。

○注意しなければならないパターン
ただ一つだけ注意しなければならないパターンがある。それは後部に空データが並ぶ場合だ。

String str="りんご,みかん,ばなな,,,";
String[] data=str.split(",");
data.length //3
data[0] //りんご
data[1] //みかん
data[2] //ばなな

意外な結果ではないだろうか?
末尾に空の要素が並んだ場合これは無視される。

これをすべて配列の要素として欲しい場合は

String str="りんご,みかん,ばなな,,,";
String[] data=str.split(",",-1);

第二引数に負の値を入れる。

data.length=6;
data[0] //りんご
data[1] //みかん
data[2] //ばなな
data[3] //""
data[4] //""
data[5] //""

すべてを要素として取得できた。

splitメソッドの基本動作としてまずはこのレッスンの内容をマスターしておこう。

○上記の内容の全ソースコード

public class SplitLesson {

	public static void main(String[] args) {
  //基本的な使い方
		String str="りんご,みかん,ばなな";
		String[] data=str.split(",");
		System.out.println(data.length);//3
		System.out.println(data[0]);//りんご
		System.out.println(data[1]);//みかん
		System.out.println(data[2]);//ばなな

  //「と」で分割
		str="さるといぬときじ";
		data=str.split("と");
		System.out.println(data.length);//3
		System.out.println(data[0]);//さる
		System.out.println(data[1]);//いぬ
		System.out.println(data[2]);//きじ

  //「and]で分割
		str="さるandいぬandきじ";
		data=str.split("and");
		System.out.println(data.length);//3
		System.out.println(data[0]);//さる
		System.out.println(data[1]);//いぬ
		System.out.println(data[2]);//きじ

  //途中に空データが入った場合
		str="りんご,みかん,,ばなな";	
		data=str.split(",");
		System.out.println(data.length);//4
		System.out.println(data[0]);//りんご
		System.out.println(data[1]);//みかn
		System.out.println(data[2]);//""
		System.out.println(data[3]);//ばなな

  //第二引数を使うことで最大分割数を指定
		str="りんご,みかん,ばなな";
		data=str.split(",",2);
		System.out.println(data.length);//2
		System.out.println(data[0]);//りんご
		System.out.println(data[1]);//みかん,ばなな

  //末尾に空データが並んだ場合は注意
		str="りんご,みかん,ばなな,,,,";
		data=str.split(",");
		System.out.println(data.length);//3
		System.out.println(data[0]);//りんご
		System.out.println(data[1]);//みかん
		System.out.println(data[2]);//ばなな

  //末尾の空データも配列として取得したい場合は
  //第二引数に負の値をいれる
		str="りんご,みかん,ばなな,,,,";
		data=str.split(",",-1);
		System.out.println(data.length);//7
		System.out.println(data[0]);//りんご
		System.out.println(data[1]);//みかん
		System.out.println(data[2]);//ばなな
		System.out.println(data[3]);//""
		System.out.println(data[4]);//""
		System.out.println(data[5]);//""
		System.out.println(data[6]);//""
	}
}