如何将List <string>列表转换为csv string </string>

时间:2012-11-16 10:40:16

标签: java string csv

我有{{1>} 字符串。是否有 Java 便捷方法将此List转换为 CSV List?所以“test1,test2,test3”是包含“test1”“test2”“test3”的List 3 String元素转换的结果

我可以自己编写方法来转换String但是这可能已经由 API 实现了吗?

14 个答案:

答案 0 :(得分:35)

Apache Commons Lang包含StringUtils.join()方法,正是出于此目的。请注意,存在不同的风格。

截至2014年3月,Java 8现在有StringJoiner

答案 1 :(得分:9)

有一个名为Joiner的Guava类可以轻松创建这些字符串。

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

答案 2 :(得分:7)

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

答案 3 :(得分:7)

写了这个简单的方法;

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();
}

答案 4 :(得分:6)

如果您使用的是Java 8

List<String> objects= Arrays.asList("Test1","Test2","Test3");
String objectsCommaSeparated = String.join(",", objects);
System.out.println(objectsCommaSeparated);

使用Streams

String objectsCommaSeparated = objects.stream().collect(Collectors.joining(","));
System.out.println(objectsCommaSeparated);

答案 5 :(得分:5)

如果您想使用核心java,我认为您可以使用以下内容。

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

警告:我没有检查过所有这些情况。 ;)

Arrays.toString会产生类似

的东西
[a], [b], [c]

如果您列出包含a, b, c

我们可以使用以下逗号分隔的优点,只需删除方括号,并将"替换为逗号在数据中的情况。如果你不需要这个,你可以replace("[", ""

答案 6 :(得分:2)

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();
    }
}

答案 7 :(得分:1)

不,JDK中没有可用的便捷方法。您可以创建自己的,但对于一般情况,这并不像看起来那么简单(例如,当字段包含分隔符,换行符或textdelimiter时):

  • 字段包含换行符:必须引用字段
  • 字段包含textdelimiter:delimiter加倍
  • 字段包含分隔符:必须引用字段

示例:

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

应该给你这个:

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

编辑:这是一个提议的RFC for CSV

EDIT2:如果有人对实施感兴趣,请发表评论,我家里的硬盘上有一个。

答案 8 :(得分:1)

这就是我正在做的事情

  @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);
    }

答案 9 :(得分:1)

此代码处理包含引号,逗号和其他麻烦字符的数据:

  

公共类ToCsv {

private static final String QUOTE = "\"";
private static final Pattern NON_WORD = Pattern.compile(".*\\W.*");

public final static String toCsv(final List<Object> list) {
    final StringBuilder sb = new StringBuilder();
    String sep = "";
    for (final Object object : list) {
        String s = object.toString();
        final Matcher m = NON_WORD.matcher(s);
        if (m.matches()) {
            if (s.contains(QUOTE)) {
                s = s.replaceAll(QUOTE, "\"\"");
            }
            sb.append(sep).append(QUOTE).append(s).append(QUOTE);
        } else {
            sb.append(sep).append(s);
        }
        sep = ",";
    }
    return sb.toString();
} }

答案 10 :(得分:1)

Android用户,您可以使用以下内容:

TextUtils.join(",", getCollectionOfStrings());

第二个参数将接受Object []或Iterable类。

答案 11 :(得分:0)

使用此代码

 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();
    }

答案 12 :(得分:0)

我知道已经很晚了,但是我看不到有人用Java 8 way来回答:

String csvString = String.join(",", myStringList);

答案 13 :(得分:0)

要转换 List to String Java 吗?让我们看一下如何在Java中将元素的Java集合列表转换为字符串。

Java的“基本列表”是有序集合或默认序列。

List接受重复元素,而Map不接受重复值,并且也将对象保存为键值对。

我们可以在调试代码时以可读的形式打印List元素的内容,这很有帮助。 从下面的Java程序中,让我们看看如何使用toString方法将Java列表转换为字符串数组。

我们正在传递整数参数(数字)以使用Arrays asList()方法创建Java字符串数组。

换句话说,我们将整数列表作为数组传递给list。 From below Java program, lets see how to convert Java list to string array using toString method.