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などからお願い致します。
他にも方法があれば教えていただけると幸いです。