カンマ区切りの文字列
Java で CSV 等の区切り文字で区切られた文字列の解析を行う場合に
java.util.StringTokenizer
が良く使われます。
但し、StringTokenizer は 0byte 文字列を返さないという欠点があるので、CSV 形式のデータを
解析して、データベースに insert する場合などに利用できません。
ソース記述例
public static void main(String[] args) throws Exception {
String str = "abc,,def,ghi,jkl,mno,";
StringTokenizer st = new StringTokenizer(str, ",");
int i = 0;
while (st.hasMoreTokens()) {
System.out.println(i++ + " 番目 :" + st.nextToken());
}
}
出力結果
0 番目 :abc
1 番目 :def
2 番目 :ghi
3 番目 :jkl
4 番目 :mno
データに 0byte もしくわ null を含む可能性がある CSV データを解析する場合は、
String#split(String regex)
もしくわ
String#split(String regex,int limit)
を使うのが良いです。区切り文字をが正規表現で指定できるのもうれしいです。
String#split(String regex,int limit) … limit は期待する配列の数です。
ソース記述例
public static void main(String[] args) throws Exception {
String str = "abc,,def,ghi,jkl,mno,";
String[] arr = str.split(",", 7);
for (int i = 0; i < arr.length; i++) {
System.out.println(i + " 番目 :" + arr[i]);
}
}
出力結果
0 番目 :abc
1 番目 :
2 番目 :def
3 番目 :ghi
4 番目 :jkl
5 番目 :mno
6 番目 :
String#split(String regex) … limit が 0 回と同じ、最後に null があった場合に表示されません。
ソース記述例
public static void main(String[] args) throws Exception {
String str = "abc,,def,ghi,jkl,mno,";
String[] arr = str.split(",");
for (int i = 0; i < arr.length; i++) {
System.out.println(i + " 番目 :" + arr[i]);
}
}
出力結果
0 番目 :abc
1 番目 :
2 番目 :def
3 番目 :ghi
4 番目 :jkl
5 番目 :mno
Pattern.compile(regex).split(str, n) も同じ結果が得られます。
ソース記述例
public static void main(String[] args) throws Exception {
String str = "abc,,def,ghi,jkl,mno,";
String[] arr = Pattern.compile(",").split(str, 7);
for (int i = 0; i < arr.length; i++) {
System.out.println(i + " 番目 :" + arr[i]);
}
}
出力結果
0 番目 :abc
1 番目 :
2 番目 :def
3 番目 :ghi
4 番目 :jkl
5 番目 :mno
6 番目 :
|