Java

Javaでカンマ区切りで文字列連結するいくつかの方法

Javaで配列やリストをカンマ区切りの文字列連結したいことがあり、StringJoinerクラス以外でできる方法がないのかなと調べたのでメモ。
最終的にはStringUtils#join()を使いました。
Stringの配列であればString#join()で良かったのですが、int配列だったのでStringUtilsにしました。

ここから先は調べた内容を紹介していきます。

StringJoinerを使った方法

StringJoinerクラスはJava7から使えます。
String型の配列ではない場合はString型に変換する必要があります。

import java.util.StringJoiner;
import java.util.Arrays;

public class StringJoinerSample {
  public static void main(String args[]) {
    int[] arr = {1, 2, 3, 4, 5};
    StringJoiner sj = new StringJoiner(",");
    Arrays.stream(arr).forEach(i -> sj.add(String.valueOf(i)));
    System.out.println(sj.toString()); // => 1,2,3,4,5
  }
}

String#join()を使った方法

Stringの配列であれば、String#join()が使えます。
String#join()はJava8から使えます。

public class MyClass {
    public static void main(String args[]) {
        String[] arr = {"en", "ja", "fr", "es", "zh"};
        String str = String.join(",", arr);
        System.out.println(str); // => en,ja,fr,es,zh
    }
}

Listを引数にとることもできます。

import java.util.Arrays;
import java.util.List;

public class MyClass {
  public static void main(String args[]) {
    List<String> list = Arrays.asList("en", "ja", "fr", "es", "zh");
    String str = String.join(",", list);
    System.out.println(str); // => en,ja,fr,es,zh
  }
}

Collectors#joiningを使った方法

List型のコレクションであれば以下のように連結することも可能です。

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class MyClass {
  public static void main(String args[]) {
    List<String> list = Arrays.asList("en", "ja", "fr", "es", "zh");
    String str = list.stream().collect(Collectors.joining(","));
    System.out.println(str); // => en,ja,fr,es,zh
  }
}

また、前後を丸括弧()で囲むことも可能です。

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class MyClass {
  public static void main(String args[]) {
    List<String> list = Arrays.asList("en", "ja", "fr", "es", "zh");
    String str = list.stream().collect(Collectors.joining(",", "(", ")"));
    System.out.println(str); // => (en,ja,fr,es,zh)
  }
}

StringUtils#join()を使った方法

StringUtilsクラスはorg.apache.commons:commons-lang3に入っています。
gradleとかmavenでライブラリをインストールする必要があります。

org.apache.commons:commons-lang3:3.6

以下のように1行で書くことができます。
StringUtils#join()はObjectの配列を引数にとるので
ArrayUtils#toObject()を使用してIntegerクラスの配列に変換しています。

import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;

public class MyClass {
    public static void main(String args[]) {
        int[] arr = {1,2,3,4,5};
        String str = StringUtils.join(ArrayUtils.toObject(arr), ",");
        System.out.println(str); // => 1,2,3,4,5
    }
}

他にもGoogle GuavaのJoinerクラスを使った方法などあります。

最後までお読み頂きありがとうございました。
不備や質問などはコメント欄、編集リクエスト、Twitterなどからお願い致します。
他にも方法があれば教えていただけると幸いです。