Java 如何转换列表<;字符串>;列表到csv字符串
我有一个字符串列表。是否有Java便捷的方法将此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
列表
转换为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;iorg.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);这将使我崩溃