24

我有List一个字符串。是否有Java便捷方法可以将其转换ListCSV String?所以 "test1, test2, test3" 是包含 "test1" "test2" "test3" 的列表 3 个字符串元素的转换结果

我可以自己编写方法来转换,String但也许这已经由API实现了?

4

14 回答 14

42

Apache Commons Lang包含一个StringUtils.join()方法正是为了这个目的。请注意,存在不同的风味。

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

于 2012-11-16T10:42:24.120 回答
24

如果您使用的是 Java 8

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

使用流

String objectsCommaSeparated = objects.stream().collect(Collectors.joining(","));
System.out.println(objectsCommaSeparated);
于 2017-06-25T14:37:36.053 回答
10

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

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

于 2012-11-16T10:44:52.713 回答
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 回答
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 回答
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

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

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

例子:

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

应该给你这个:

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

编辑:这是 CSV 的提议RFC

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

于 2012-11-16T10:47:44.767 回答
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 回答
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 回答
2

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

公共类 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();
} }
于 2017-11-24T21:13:25.000 回答
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 回答
1

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

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

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

于 2019-08-25T19:43:02.807 回答
1

我知道已经很晚了,但我没有看到有人用Java 8 方式回答:

String csvString = String.join(",", myStringList);
于 2019-08-29T08:31:57.207 回答
0

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

基本上,Java 中的 List 是有序集合或默认序列。

List 接受重复的元素,不像 Map 不接受重复的值,并且还将对象保存在键值对中。

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

我们使用 Arrays asList() 方法传递整数参数(数字)来创建 java 字符串数组。

换句话说,我们将整数列表作为数组传递给列表。 在下面的 Java 程序中,让我们看看如何使用 toString 方法将 Java 列表转换为字符串数组。

于 2020-05-14T15:06:49.527 回答