文字列操作でしばしば使われるのが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]);//""
}
}

コメント