日常工作中经常和 集合、数组、Map、字符串互相转换 打交道,这里记录一些 Guava 的用法。
使用 StringBuilder
public static String listToStringByStringBuilder(List<String> list, String delimiter) { StringBuilder stringBuilder = new StringBuilder(); list.forEach(element -> stringBuilder.append(element).append(delimiter)); stringBuilder.delete(stringBuilder.length()- delimiter.length(),stringBuilder.length()); return stringBuilder.toString(); }
|
使用 Collectors.joining
public static String listToStringByCollectorsJoining(List<String> list, String delimiter, String prefix, String suffix) { return list.stream().collect(Collectors.joining(delimiter, prefix, suffix )); }
|
使用 StringJoiner
public static String listToStringByStringJoiner(List<String> list, String separator, String prefix, String suffix) { StringJoiner stringJoiner = new StringJoiner(separator,prefix,suffix); list.forEach(element -> stringJoiner.add(element)); return stringJoiner.toString(); }
|
使用 Joiner
, String.join()
方法 也可以对集合或者数组进行分隔
public static String arrayToString(Object[] parts,String separator,boolean skipNull,boolean useForNull,String nullText) { if (skipNull) { return Joiner.on(separator).skipNulls().join(parts); } if (useForNull) { return Joiner.on(separator).useForNull(nullText).join(parts); } return Joiner.on(separator).join(parts); }
|
keyValueSeparator
为 map
中 key
和 value
的分隔符
public static String mapToString(Map map, String separator, String keyValueSeparator) { return Joiner.on(separator).withKeyValueSeparator(keyValueSeparator).join(map); }
|
字符串 aabbcc
,按照长度为2,会分隔元素为 [aa] [bb] [cc]
的集合
public static List<String> stringToFixedLengthList(CharSequence sequence, int length) { Iterable<String> iterable = Splitter.fixedLength(length).split(sequence); List<String> list = new ArrayList<>(); for (Iterator<String> iterator = iterable.iterator(); iterator.hasNext();) { list.add(iterator.next()); } return list; }
|
字符串转集合,方法有很多种。这里举两个,说明: trimResults()
去掉元素左右空字符串,omitEmptyStrings
去掉分隔符号之间的空元素。举个例子:
" k ;;p"
,trimResults
之后得到 [k] [空] [p]
三个元素,加上 omitEmptyStrings
会去除空元素。
public static List<String> stringSplitToList(String separator,CharSequence sequence) { Iterable<String> iterable = Splitter.on(separator).trimResults().omitEmptyStrings().split(sequence); List<String> list = new ArrayList<>(); Iterator<String> iterator = iterable.iterator(); while (iterator.hasNext()) { list.add(iterator.next()); } return Splitter.on(separator).trimResults().omitEmptyStrings().splitToList(sequence); }
|
使用 java8
新特性
public static List StringToList(String separator, String str) { return Arrays.stream(str.split(separator)).filter(e -> !e.isEmpty()).collect(Collectors.toList()); }
|
字符串 a,b,c,d,e,f,g
限制长度为3,得到集合元素为 [a] [b] [c,d,e,f,g]
public static List<String> limitSplitToList(String separator, int length, CharSequence sequence) { return Splitter.on(separator).limit(length).splitToList(sequence); }
|
字符串 a,b:c,d;e
有不同分隔符, 逗号、 冒号、 分号等,利用正则表达式 [,|:|;]
分隔
public static List<String> multiLimitSplitToList(String separatorPattern, CharSequence sequence) { return Splitter.onPattern(separatorPattern).splitToList(sequence); }
|
字符串 name=kangPan;age=10;six=boy
最后不能带分隔符,否则报错。分隔符是分号,键值对分隔符是等号,会拆分
key是name,value是kangPan
等键值对的map
public static Map StringToMap(String separator,String withKeyValueSeparator, CharSequence sequence) { return Splitter.on(separator).withKeyValueSeparator(withKeyValueSeparator).split(sequence); }
|