Java(splitの使い方)

Java

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

りんご,みかん,ばなな

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

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

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

上記の場合

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

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

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

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

「and」で分割

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

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

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

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

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

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

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

上記の場合

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

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

以上でsplitの基本はOKだ。

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

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

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

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

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

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

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

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

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

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

01public class SplitLesson {
02 
03  public static void main(String[] args) {
04  //基本的な使い方
05    String str="りんご,みかん,ばなな";
06    String[] data=str.split(",");
07    System.out.println(data.length);//3
08    System.out.println(data[0]);//りんご
09    System.out.println(data[1]);//みかん
10    System.out.println(data[2]);//ばなな
11 
12  //「と」で分割
13    str="さるといぬときじ";
14    data=str.split("と");
15    System.out.println(data.length);//3
16    System.out.println(data[0]);//さる
17    System.out.println(data[1]);//いぬ
18    System.out.println(data[2]);//きじ
19 
20  //「and]で分割
21    str="さるandいぬandきじ";
22    data=str.split("and");
23    System.out.println(data.length);//3
24    System.out.println(data[0]);//さる
25    System.out.println(data[1]);//いぬ
26    System.out.println(data[2]);//きじ
27 
28  //途中に空データが入った場合
29    str="りんご,みかん,,ばなな";
30    data=str.split(",");
31    System.out.println(data.length);//4
32    System.out.println(data[0]);//りんご
33    System.out.println(data[1]);//みかn
34    System.out.println(data[2]);//""
35    System.out.println(data[3]);//ばなな
36 
37  //第二引数を使うことで最大分割数を指定
38    str="りんご,みかん,ばなな";
39    data=str.split(",",2);
40    System.out.println(data.length);//2
41    System.out.println(data[0]);//りんご
42    System.out.println(data[1]);//みかん,ばなな
43 
44  //末尾に空データが並んだ場合は注意
45    str="りんご,みかん,ばなな,,,,";
46    data=str.split(",");
47    System.out.println(data.length);//3
48    System.out.println(data[0]);//りんご
49    System.out.println(data[1]);//みかん
50    System.out.println(data[2]);//ばなな
51 
52  //末尾の空データも配列として取得したい場合は
53  //第二引数に負の値をいれる
54    str="りんご,みかん,ばなな,,,,";
55    data=str.split(",",-1);
56    System.out.println(data.length);//7
57    System.out.println(data[0]);//りんご
58    System.out.println(data[1]);//みかん
59    System.out.println(data[2]);//ばなな
60    System.out.println(data[3]);//""
61    System.out.println(data[4]);//""
62    System.out.println(data[5]);//""
63    System.out.println(data[6]);//""
64  }
65}

コメント

タイトルとURLをコピーしました