Java プログラムメモ


トップ

カンマ区切りの文字列

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 番目 :


プログラムメモ アフリカ雑貨・珈琲豆・アールブリュット作品 マゴソスクール クラウドファンディング
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送