Guava学习--字符串处理

概述

本文主要介绍Guava1中的字符串处理,尤其是Joiner2Splitter3的使用

Joiner

定义

使用特定的分隔符(seperator)把一个字符串序列拼接起来,尤其处理字符串序列中含有null的时候非常有用

Note:

  1. Joiner的实例总是不可变(immutable)的,其配置方法总会返回一个新的Joiner实例
  2. Joiner的配置方法有skipNullsuseForNull
  3. skipNulls会过滤掉字符串序列中的null,当不使用该配置方法时,一定要保证字符串序列中不要含有null,否则会报异常
  4. useForNull会使用指定的字符串替换字符串序列中的null
  5. MapJoiner是针对Map的拼接,通过Joiner实例创建,在Joiner实例上可以使用useForNull方法,但不能使用skipNulls方法

使用

把List转换为String

Joiner.on(String seperator)指定List中每个元素的特定分隔符,Joiner.join(Iterable<?> parts)来拼接List中的数据

1
2
String result = Joiner.on("; ").skipNulls()
.join(Lists.newArrayList("Harry", null, "Ron", "hermione"));

把Map转换为String

Joiner.on(String seperator)指定Map中每个元素的特定分隔符,Joiner.withKeyValueSeparator(char keyValueSeparator)指定KEYVALUE的分隔符,MapJoiner.join(Iterable<? extends Entry<?, ?>> entries)来拼接Map中的数据

1
2
3
4
5
Map<String, Integer> salary = Maps.newHashMap();
salary.put("John", 1000);
salary.put("Jane", 1500);
String result = Joiner.on(" , ").withKeyValueSeparator(" = ")
.join(salary);

拼接嵌套的Collections

拼接集合中的每个Collection被转换后的字符串

1
2
3
4
5
6
7
8
9
10
11
List<ArrayList<String>> nested = Lists.newArrayList(
Lists.newArrayList("apple", "banana", "orange"),
Lists.newArrayList("cat", "dog", "bird"),
Lists.newArrayList("John", "Jane", "Adam"));
String result = Joiner.on(";").join(Iterables.transform(nested,
new Function<List<String>, String>() {
@Override
public String apply(List<String> input) {
return Joiner.on("-").join(input);
}
}));

Splitter

定义

使用特定的分隔符(seperator)将字符串分割出来,并根据条件组合成列表数据

使用

把String转换为List

Splitter.on(String seperator)指定特定的分隔符,Splitter.trimResults()去掉字符串开始和结尾处的空格,Splitter.splitToList(CharSequence sequence)将字符串序列组合成列表

1
2
3
String input = "apple - banana - orange";
List<String> result = Splitter.on("-").trimResults()
.splitToList(input);

把String转换为Map

Splitter.on(String seperator)指定特定的分隔符,Splitter.withKeyValueSeparator(String separator)指定字符串中KEYVALUE的分隔符,MapSplitter.MapSplitter(CharSequence sequence)将指定的字符串序列组合成Map

1
2
3
4
String input = "John=first,Adam=second";
Map<String, String> result = Splitter.on(",")
.withKeyValueSeparator("=")
.split(input);

多个分隔符分割String

Splitter.onPattern(String separatorPattern)指定满足正则条件的分隔符,Splitter.omitEmptyStrings()忽略掉空字符串,Splitter.splitToList(CharSequence sequence)将字符串序列组合成列表

1
2
3
4
String input = "apple.banana,,orange,,.";
List<String> result = Splitter.onPattern("[.|,]")
.omitEmptyStrings()
.splitToList(input);

根据指定长度分割String

Splitter.fixedLength(int length)指定分割字符串的长度,Splitter.splitToList(CharSequence sequence)将字符串序列组合成列表

1
2
String input = "Hello world";
List<String> result = Splitter.fixedLength(3).splitToList(input);

限制分割的结果

Splitter.on(String seperator)指定特定的分隔符,Splitter.limit(int limit)指定分割字符串序列的次数,Splitter.splitToList(CharSequence sequence)将字符串序列组合成列表

1
2
3
4
String input = "a,b,c,d,e";
List<String> result = Splitter.on(",")
.limit(4)
.splitToList(input);

参考方案

Guava - Join and Split Collections
Google Guava官方教程(中文版)