【发布时间】:2012-11-05 01:56:16
【问题描述】:
我有一个List 字符串。是否有 Java 方便的方法可以将此 List 转换为 CSV String?所以 "test1, test2, test3" 是包含 "test1" "test2" "test3" 的 List 3 个字符串元素的转换结果
我可以自己编写方法来转换String,但也许这已经由 API 实现了?
【问题讨论】:
我有一个List 字符串。是否有 Java 方便的方法可以将此 List 转换为 CSV String?所以 "test1, test2, test3" 是包含 "test1" "test2" "test3" 的 List 3 个字符串元素的转换结果
我可以自己编写方法来转换String,但也许这已经由 API 实现了?
【问题讨论】:
Apache Commons Lang 包含一个 StringUtils.join() 方法正是为了这个目的。请注意,存在不同的风味。
截至 2014 年 3 月,Java 8 现在有一个 StringJoiner
【讨论】:
String myCsvString = StringUtils.join(myList, ",") 用于 Apache Commons 方法。
如果您使用的是 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);
【讨论】:
有一个名为 Joiner 的 Guava 类可以轻松创建此类字符串。
做Joiner.on(",").join(yourStrings)
【讨论】:
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
【讨论】:
写了这个简单的方法;
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();
}
【讨论】:
如果您只想使用核心 java,我认为您可以使用以下内容。
java.util.Arrays.toString(list.toArray(new String[list.size()]).replace("[", "\"").replace("]", "\"");
警告:我尚未检查所有情况。 ;)
Arrays.toString 会产生类似的东西
[a], [b], [c]
如果您列出包含a, b, c
我们可以在这里使用逗号分隔这一事实,只需删除方括号并将其替换为",以用于逗号在数据中的情况。如果你不需要这个,你可以这样做replace("[", ""
【讨论】:
不,JDK 中没有可用的便捷方法。您可以创建自己的,但对于一般情况,这并不像看起来那么简单(例如,当字段包含分隔符、换行符或文本分隔符时):
例子:
String[] fields = { "\n", ""he said \"hello\"", "," }
应该给你这个:
"
","he said ""hello""",","
编辑:这是一个提议的RFC for CSV。
EDIT2:如果有人对实现感兴趣,请发表评论,我家里的硬盘上有一个。
【讨论】:
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();
}
}
【讨论】:
这就是我正在做的事情
@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);
}
【讨论】:
此代码处理包含引号、逗号和其他麻烦字符的数据:
公共类 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(); } }
【讨论】:
使用此代码
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();
}
【讨论】:
Android 用户,可以使用以下:
TextUtils.join(",", getCollectionOfStrings());
第二个参数将接受 Object[] 或 Iterable 类。
【讨论】:
我知道已经很晚了,但我没有看到有人回复Java 8 way:
String csvString = String.join(",", myStringList);
【讨论】:
想要转换List to String Java?让我们看看如何在 Java 中将元素的 Java Collections List 转换为 String。
Java 中的 List 基本上是有序集合或默认序列。
List 接受重复的元素,而 Map 不接受重复的值,并且还将对象保存在键值对中。
我们可以在调试代码时以可读的形式打印 List 元素的内容,这很有帮助。 从下面的 Java 程序中,让我们看看如何使用 toString 方法将 Java 列表转换为字符串数组。
我们使用 Arrays asList() 方法传递整数参数(数字)来创建 java 字符串数组。
换句话说,我们将整数列表作为数组传递给列表。 From below Java program, lets see how to convert Java list to string array using toString method.
【讨论】: