Java 如何转换列表<;字符串>;列表到csv字符串

Java 如何转换列表<;字符串>;列表到csv字符串,java,string,csv,Java,String,Csv,我有一个字符串列表。是否有Java便捷的方法将此列表转换为CSV字符串?因此,“test1,test2,test3”是包含“test1”“test2”“test3”的列表3字符串元素转换的结果 我可以自己编写方法来转换字符串,但这可能已经由API实现了?包含了一个用于此目的的方法。注意,不同的口味存在 截至2014年3月,Java8现在有了一个我认为如果您只想使用核心Java,可以使用以下内容 java.util.Arrays.toString(list.toArray(new String[l

我有一个字符串列表。是否有Java便捷的方法将此
列表
转换为CSV
字符串
?因此,“test1,test2,test3”是包含“test1”“test2”“test3”的列表3字符串元素转换的结果

我可以自己编写方法来转换
字符串
,但这可能已经由API实现了?

包含了一个用于此目的的方法。注意,不同的口味存在


截至2014年3月,Java8现在有了一个

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

java.util.Arrays.toString(list.toArray(new String[list.size()]).replace("[", "\"").replace("]", "\"");
警告:我尚未检查所有此类情况。;)

Arrays.toString将生成如下内容

[a], [b], [c]
如果列表中包含
a、b、c


在这里,我们可以利用逗号分隔的事实,只需删除方括号,并在数据中包含逗号的情况下用
替换它们。如果不需要,您可以只做
替换(“[”,”

),有一个名为Guava的类可以轻松创建此类字符串


Do
Joiner.on(“,”).join(yourStrings)

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

  • field conatins换行符:必须引用字段
  • 字段包含textdelimiter:分隔符加倍
  • 字段包含分隔符:必须引用字段
例如:

String[] fields = { "\n", ""he said \"hello\"", "," }
String text = StringUtils.arrayToCommaDelimitedString(new Object[]{"test1", "test2", "test3"});
我应该给你这个:

"
","he said ""hello""",","
编辑:这里有一个提议

EDIT2:如果有人对某个实现感兴趣,请留下评论,我在家里的硬盘上有一个

 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();
    }
公共静态字符串listToString(列表){
int len=list.size();
int last=len-1;
StringBuffer sb=新的StringBuffer(2*(len+1));
某人附加('{');
对于(int i=0;i
org.springframework.util.StringUtils
中有一些有用的方法

例如:

String[] fields = { "\n", ""he said \"hello\"", "," }
String text = StringUtils.arrayToCommaDelimitedString(new Object[]{"test1", "test2", "test3"});
有关详细信息:
写了这个简单的方法

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();
}
String listToCsv(List listofstring,char分隔符){
StringBuilder sb=新的StringBuilder();
//几乎最后
对于(int i=0;i0){
sb.append(listOfStrings.get(listOfStrings.size()-1));
}
使某人返回字符串();
}
公共类StringUtil{
公共字符串toCsv(最终列表){
返回字符串(列表“,”);
}
公共字符串toString(最终列表,字符分隔符){
最终StringBuilder b=新StringBuilder();
如果(列表!=null){
对于(int i=0;i
我就是这么做的

  @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);
    }
@测试
公共void testString(){
listOfWords=Arrays.asList(“Some”、“Other”、“lalala”);
最后一个字符串字段=listOfWords.stream().reduce((t,u)->t+“,”+u.get();
System.out.println(“Look”+字段);
}

如果您使用的是Java 8

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

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

公共类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();
} }
private静态最终字符串QUOTE=“\”;
私有静态最终模式NON_WORD=Pattern.compile(“.\\W.”);
公共最终静态字符串toCsv(最终列表){
最终StringBuilder sb=新StringBuilder();
字符串sep=“”;
用于(最终对象:列表){
字符串s=object.toString();
最终匹配器m=非单词匹配器;
如果(m.matches()){
如果(包含(报价)){
s=s.replaceAll(引号为“\”\”);
}
附加,附加,附加,附加,附加,附加,附加;
}否则{
某人(九月)追加;
}
sep=“,”;
}
使某人返回字符串();
} }

Android用户,您可以使用以下功能:

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

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

我知道时间已经很晚了,但我看没有人回答:

String csvString=String.join(“,”,myStringList);

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

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

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

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

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

换句话说,我们将整数列表作为数组传递给列表。

在天真的情况下,这就足够了,但如果字符串本身包含逗号、引号或换行符,它就会失败。该链接已失效,可能是一个很好的替代品?@Marc Andre-现在已修改。ThxA是一个很好的答案,但如果它给出了用法示例,则会更好。例如
字符串myCsvString=StringUtils.join(myList,“,”)
对于Apache Commons方法。Oooh StringJoiner很好。String myCsvString=String.join(“,”,myList);这将使我崩溃