[Java]优雅实现List拼接成用符号隔开的String,String解析后分割成List、数组

2021-03-20 2108点热度 0人点赞 0条评论

前言

经常遇到List、ArrayList需要拼接成用逗号或者空格隔开的文本,或者类似的文本转成List,最基本的方法是迭代List里的每一项,然后加到这个String上去,但是最后有一个符号,需要特别处理下,虽然并不是很难,但是稍微有点繁琐,且不优雅,例如:

StringBuilder string = new StringBuilder();
for (String name : names) {
   string.append(name).append(",");
}
string = new StringBuilder(string.substring(0, string.length() - 1));
System.out.println(string);

优雅实现拼接

一行代码就就可以咯

// 如果换成是List、ArrayList也是可以的
String[] names = new String[]{"Jame", "Terry", "Tom"};

String strings = String.join(",", names); //第一个参数是分隔符,第二个参数是List或者数组
System.out.println(strings);

如果不是简单的ArrayList<String>,而是Object,可以使用Stream的map reduce功能:

//存的是假设是一个Object,用户的ID和姓名,要输出姓名的string
List<String[]> users = new ArrayList<>();
users.add(new String[]{"1", "James"});
users.add(new String[]{"2", "Terry"});
users.add(new String[]{"3", "Tom"});

String strings = users.stream().map(item -> item[1]).collect(Collectors.joining(","));
System.out.println(strings);

如果你使用的低版本的Java,还可以使用 Apache Commons library

// 如果换成是List、ArrayList也是可以的
String[] names = new String[]{"Jame", "Terry", "Tom"};

//第一个参数是List或者数组,第二个参数是分隔符
String string2 = org.apache.commons.lang3.StringUtils.StringUtils.join(names, ",");
System.out.println(string2);

如果你使用了Spring,Spring里也有工具方法可以使用:

import org.springframework.util.StringUtils;

//测试数组
String[] names = new String[]{"Jame", "Terry", "Tom"};
StringUtils.arrayToCommaDelimitedString(names);//这个直接用逗号隔开
String strings = StringUtils.arrayToDelimitedString(names, ",");//这个方法可以指定分隔符
System.out.println(strings);

//测试Array
List<String> names2 = new ArrayList<>();
names2.add("1");
names2.add("2");
System.out.println(StringUtils.arrayToDelimitedString(names2.toArray(), ","));

如果是Android上开发,还可以使用:

TextUtils.join()

实现解析String转成Array

String strings = "James,Terry,Tom";
//转成数组
String[] names = strings.split(",");
//转成Array
List<String> namesArray = Arrays.asList(names.clone());
//Array也可以方便的转成数组
String[] otherNames = namesArray.toArray(new String[]{});

//测试如果中间隔开的实空格(可能有多个空格,或者\t这类)
String strings2 = "James Terry Tom";
// 利用正则表达式来解析
String[] names2 = strings2.split("\\s+");

 

 

admin

这个人很懒,什么都没留下

文章评论

您需要 登录 之后才可以评论