59
58

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-03-11

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

59
58
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
59
58

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?