List.toString()产生的结果会在开头和结尾添加英文中括号,每个字符串用逗号分隔符分隔(分隔符不可更变)。如果我们想去掉方括号的话,需要借助String.replaceAll方法。
/**
* List的toString方法,结果前后会带有英文的中括号[],如:[1, 2, 3, 4, 5]
*/
public static void main(String[] args) {
List<Integer> asList = Arrays.asList(1, 2, 3, 4, 5);
String list2String = asList.toString();
System.out.println(list2String);
//使用replaceAll方法替换 中括号
list2String = list2String.replaceAll("\\[|]", "");
System.out.println(list2String);
}
java8 stream中提供了Collectors.join()方法可用于将集合转成为具有指定分隔符、前缀和后缀的字符串。
public class Demo2 {
/**
* List 转 String
* stream流中的Collections.joining方法
**/
public static void main(String[] args) {
List<String> list = Arrays.asList("张三", "李四", "王武", null, "麻子");
//java stream流中的Collections.joining方法
//指定分隔符
String collect = list.stream().collect(Collectors.joining(","));
//没有分隔符,直接拼接
String collect1 = list.stream().collect(Collectors.joining());
//指定分隔符,前缀,后缀
String collect2 = list.stream().collect(Collectors.joining(",", "{", "}"));
System.out.println(collect);//张三,李四,王武,null,麻子
System.out.println(collect1);//张三李四王武null麻子
System.out.println(collect2);//{张三,李四,王武,null,麻子}
}
}
java8 String添加了一个特殊的Join方法,用于将集合转换为指定分隔符连接的字符串。
/**
* String.join()
**/
public static void main(String[] args) {
List<String> list = Arrays.asList("张三", "李四", "王武", null, "麻子");
String join = String.join(",", list);
System.out.println(join);//张三,李四,王武,null,麻子
}
Apache commons包的外部库有一个方法StringUtils.join() 方法,它类似于 String.join() 方法,用于将集合转成指定分隔符链接的字符串;但是,如果集合中有null的话,会被转换成空串。
/**
* StringUtils.join()
**/
public static void main(String[] args) {
List<String> list = Arrays.asList("张三", "李四", "王武", null, "麻子");
//StringUtils.join方法,集合中有null的话,会转成空串""
String join = StringUtils.join(list, ",");
System.out.println(join); //张三,李四,王武,,麻子
}
java中提供了StringBuilder、StringBuffer两个类,可以使用他们提供的append方法自定义join方法,将集合转成字符串。
/**
* StringBuilder、StringBuffer的append()方法
**/
public static void main(String[] args) {
List<String> list = Arrays.asList("张三", "李四", "王武", null, "麻子");
//3. StringBuilder、StringBuffer的append方法自定义join方法
StringBuilder sb = new StringBuilder();
for (String s : list) {
sb.append(s).append(",");
}
//sb.insert(0, "join如下:");
if (sb.length() > 1) {
sb.deleteCharAt(sb.length() - 1);
}
System.out.println(sb.toString()); //张三,李四,王武,null,麻子
}
?逻辑如上,上面逻辑可以封账成一个通用的join方法
public class Demo2 {
public static class ListJoin<E> {
public String join(String delimiter, Collection<? extends E> list) {
Objects.requireNonNull(delimiter);
Objects.requireNonNull(list);
StringBuilder result = new StringBuilder();
for (E obj : list) {
//根据需要对空进行处理
if (Objects.isNull(obj)) {
continue;
}
result.append(obj).append(delimiter);
}
if (result.length() > 1) {
result.deleteCharAt(result.length() - 1);
}
return result.toString();
}
}
/**
* StringBuilder、StringBuffer的append()方法
**/
public static void main(String[] args) {
List<String> list = Arrays.asList("张三", "李四", "王武", null, "麻子");
//上述join方法可以修改成通用的join方法
ListJoin<String> strDemo = new ListJoin<>();
String join = strDemo.join(",", list);
System.out.println(join); //张三,李四,王武,麻子
ListJoin<Integer> intDemo = new ListJoin<>();
List<Integer> asList = Arrays.asList(1, 2, 3, 4, 5);
String intJoin = intDemo.join("-", asList);
System.out.println(intJoin); //1-2-3-4-5
}
}
以上方式都可以将List集合转成字符串,具体根据业务需要使用不同方式。