24

私は文字列を持ってListます。これをCSVに変換するJavaの便利な方法はありますか?したがって、「test1、test2、test3」は、「test1」、「test2」、「test3」を含むリスト3文字列要素の変換の結果です。List String

自分でメソッドを記述して変換することもできますが、これはすでにAPIStringによって実装されているのでしょうか。

4

14 に答える 14

42

Apache Commons Langには、まさにこの目的のためのStringUtils.join()メソッドが含まれています。異なるフレーバーが存在することに注意してください。

そして 2014 年 3 月の時点で、Java 8 にはStringJoinerが追加されました。

于 2012-11-16T10:42:24.120 に答える
10

この種の String を簡単に作成できるJoinerというGuava クラスがあります。

行うJoiner.on(",").join(yourStrings)

于 2012-11-16T10:44:52.713 に答える
8

この簡単な方法を書きました。

String listToCsv(List<String> listOfStrings, char separator) {
    StringBuilder sb = new StringBuilder();

    // all but last
    for(int i = 0; i < listOfStrings.size() - 1 ; i++) {
        sb.append(listOfStrings.get(i));
        sb.append(separator);
    }

    // last string, no separator
    if(listOfStrings.size() > 0){
        sb.append(listOfStrings.get(listOfStrings.size()-1));
    }

    return sb.toString();
}
于 2013-02-12T15:35:11.363 に答える
8

にはいくつかの便利なメソッドがありorg.springframework.util.StringUtilsます。

例:

String text = StringUtils.arrayToCommaDelimitedString(new Object[]{"test1", "test2", "test3"});

詳細: http://static.springsource.org/spring/docs/1.2.9/api/org/springframework/util/StringUtils.html

于 2012-11-16T11:41:25.483 に答える
6

コアJavaのみを使用したい場合は、次を使用できると思います。

java.util.Arrays.toString(list.toArray(new String[list.size()]).replace("[", "\"").replace("]", "\"");

警告: このすべてのケースを確認したわけではありません。;)

Arrays.toString は次のようなものを生成します

[a], [b], [c]

リストに含まれている場合a, b, c

ここでは、カンマで区切られているという事実を利用して、角括弧を削除し"、データ内にカンマがある場合に置き換えます。これが必要ない場合は、ただ行うことができますreplace("[", ""

于 2012-11-16T10:44:42.183 に答える
3
public class StringUtil {

    public String toCsv(final List<?> list) {
        return toString(list, ',');
    }

    public String toString(final List<?> list, char delimiter) {
        final StringBuilder b = new StringBuilder();
        if (list != null) {
            for (int i = 0; i < list.size(); i++) {
                b.append(list.get(i).toString());
                if (i != list.size() - 1) {
                    b.append(delimiter);
                }
            }
        }
        return b.toString();
    }
}
于 2014-10-01T15:50:11.747 に答える
3

いいえ、JDK で利用できる便利な方法はありません。独自のものを作成することもできますが、一般的なケースでは、これは見た目ほど簡単ではありません (たとえば、フィールドに区切り文字、改行文字、またはテキスト区切り文字が含まれている場合):

  • field conatins newline: フィールドは引用符で囲む必要があります
  • フィールドに textdelimiter が含まれています: 区切り文字が 2 重になっています
  • フィールドにセパレータが含まれています: フィールドは引用符で囲まれている必要があります

例:

String[] fields = { "\n", ""he said \"hello\"", "," }

これを与える必要があります:

"
","he said ""hello""",","

編集: これは CSV の提案されたRFC です

EDIT2: 誰かが実装に興味がある場合は、コメントを残してください。自宅のハードディスクに 1 つ待っています。

于 2012-11-16T10:47:44.767 に答える
2

これが私がしていることです

  @Test
    public void testString(){
        List<String> listOfWords = Arrays.asList("Some","Other","lalala");

        final String fields = listOfWords.stream().reduce((t, u) -> t + "," + u).get();
        System.out.println("Look "+fields);
    }
于 2016-08-10T17:55:15.240 に答える
1

このコードを使用

 public static String listToString(List list) {

        int len = list.size();
        int last = len - 1;
        StringBuffer sb = new StringBuffer(2 * (len + 1));

        sb.append('{');

        for (int i = 0; i < len; i++) {
            sb.append(list.get(i));

            if (i != last) {
                sb.append(',');
            }
        }

        sb.append('}');

        return sb.toString();
    }
于 2012-11-16T10:49:04.087 に答える