How to convert a List<String> list to csv string
我有一个
的列表3字符串元素的转换结果。
我可以自己编写用于转换
Apache Commons Lang包含一个StringUtils.join()方法。请注意,存在不同的口味。
自2014年3月起,Java 8现在具有StringJoiner
如果您使用的是Java 8
1 2 3 |
使用流
1 2 |
有一个名为Joiner的Guava类,可以轻松创建此类字符串。
执行
编写这种简单的方法;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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(); } |
示例:
有关更多详细信息:
http://static.springsource.org/spring/docs/1.2.9/api/org/springframework/util/StringUtils.html
我想如果您只想使用核心java,可以使用以下内容。
警告:我尚未检查所有这种情况。 ;)
Arrays.toString将产生类似
的内容
1 | [a], [b], [c] |
如果您的列表包含
在这里我们可以利用逗号分隔这一事实来为我们提供好处,对于逗号在数据内的情况,只需删除方括号并将其替换为
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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(); } } |
此代码处理包含引号,逗号和其他麻烦字符的数据:
public class ToCsv {
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 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();
} }
这就是我在做什么
1 2 3 4 5 6 7 |
否,JDK中没有可用的便捷方法。您可以创建自己的,但对于一般情况,这并不像看起来那样琐碎(例如,当字段包含分隔符,换行符或textdelimiter时):
- 字段换行符:字段必须用引号引起来
- 字段包含textdelimiter:分隔符加倍
- 字段包含分隔符:字段必须用引号引起来
示例:
1 2 |
应该给你这个:
1 2 | " ","he said""hello""","," |
编辑:这是CSV的建议RFC。
EDIT2:万一有人对实现感兴趣,请在评论中说,我在家中的硬盘上有个麻烦。
我知道已经很晚了,但是我看不到有人用Java 8方式回答过:
Android用户,可以使用以下内容:
1 | TextUtils.join(",", getCollectionOfStrings()); |
第二个参数将接受Object []或Iterable类。
使用此代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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(); } |
想要将List转换为String Java吗?让我们看一下如何在Java中将元素的Java Collections列表转换为String。
Java中的基本列表是有序集合或默认序列。
List接受重复元素,而Map不接受重复值,并且也将对象保存为键值对。
我们可以在调试代码时以可读的形式打印List元素的内容,这很有帮助。
从下面的Java程序中,让我们看看如何使用toString方法将Java列表转换为字符串数组。
我们正在传递整数参数(数字)以使用Arrays asList()方法创建Java字符串数组。
换句话说,我们将整数列表作为数组传递给list。
从下面的Java程序中,让我们看看如何使用toString方法将Java列表转换为字符串数组。