Guava全文介绍地址:Google Guava
这次主要介绍是的是com.google.common.base.Joiner。我想做为一个程序员我们每天和String打交道的时候是会占很多时间的吧。以任意的字符串和与一些分隔符标记连接在一起也是我们工作中经常要遇到的问题。但是用Guava--Joiner,它会让我们更加优雅的编码。它通常涉及把一个数组,列表,或者一个iterable和循环的内容,添加StringBuilder类项目,添加分隔符。先把Joiner的方法简单的描述一下。
A<A extends Appendable> appendTo(A appendable, Iterable<?> parts)
用来存在放通过解析预先配置的分隔符后与Iterable类型parts解析后的字符串
A <A extends Appendable> appendTo(A appendable, Iterator<?> parts)
用来存在放通过解析预先配置的分隔符后与Iterator类型parts解析后的字符串
A <A extends Appendable> appendTo(A appendable, Object[] parts)
用来存在放通过解析预先配置的分隔符后与Object[]类型parts解析后的字符串
A <A extends Appendable> appendTo(A appendable, Object first, Object second, Object... rest)
用来存在放通过解析预先配置的分隔符后与Object...类型parts解析后的字符串
StringBuilder appendTo(StringBuilder builder, Iterable<?> parts)
用来存在放通过解析预先配置的分隔符后与Iterable类型parts解析后的字符串
StringBuilder appendTo(StringBuilder builder, Iterator<?> parts)
用来存在放通过解析预先配置的分隔符后与Iterator类型parts解析后的字符串
StringBuilder appendTo(StringBuilder builder, Object[] parts)
用来存在放通过解析预先配置的分隔符后与Object[]类型parts解析后的字符串
StringBuilder appendTo(StringBuilder builder, Object first, Object second, Object... rest)
用来存在放通过解析预先配置的分隔符后与Object...类型parts解析后的字符串
String join(Iterable<?> parts)
返回一个String在Iterable<?> parts每个数据中间添加上基于之前配置的分隔符
String join(Iterator<?> parts)
返回一个String在Iterator<?> parts每个数据中间添加上基于之前配置的分隔符
String join(Object[] parts)
返回一个String在Object[] parts每个数据中间添加上基于之前配置的分隔符
String join(Object first, Object second, Object... rest)
返回一个String在Object... parts每个数据中间添加上基于之前配置的分隔符
static Joiner on(char separator)
返回一个Joiner对象用来自己替换在连接的元素中char类型分隔符
static Joiner on(String separator)
返回一个Joiner对象用来自己替换在连接的元素中String类型分隔符
Joiner skipNulls()
返回一个Joiner对象但是会跳过连接元素中为null的元素
Joiner useForNull(String nullText)
返回一个Joiner对象但是会把为null的元素替换为String类型的nullText
Joiner.MapJoiner withKeyValueSeparator(String keyValueSeparator)
返回一个MapJoiner对象,用于添加到间隔Map中的Entity(而on()方法是替换key与value之间)。是Splitter.withKeyValueSeparator()的逆运算。
然后大家就可以对照下面的例子来理解这个类的用法了。
public class JoinerTest {
@Test
public void testMapJoiner() {
//Using LinkedHashMap so that the original order is preserved
String expectedString = "Washington D.C=Redskins#New York City=Giants#Philadelphia=Eagles#Dallas=Cowboys";
Map<String,String> testMap = Maps.newLinkedHashMap();
testMap.put("Washington D.C","Redskins");
testMap.put("New York City","Giants");
testMap.put("Philadelphia","Eagles");
testMap.put("Dallas","Cowboys");
String returnedString = Joiner.on("#").withKeyValueSeparator("=").join(testMap);
assertThat(returnedString,is(expectedString));
}
@Test
public void testJoinStrings(){
String[] values = new String[]{"foo", "bar","baz"};
String returned = Joiner.on("|").join(values);
assertThat(returned,is("foo|bar|baz"));
}
@Test
public void testJoinStringBuilder(){
String[] values = new String[]{"foo", "bar","baz"};
StringBuilder builder = new StringBuilder();
StringBuilder returned = Joiner.on("|").appendTo(builder,values);
assertThat(returned,is(builder));
assertThat(returned.toString(),is("foo|bar|baz"));
}
@Test
public void testJoinFileWriter() throws Exception{
File tempFile = new File("testTempFile.txt");
tempFile.deleteOnExit();
CharSink charSink = Files.asCharSink(tempFile, Charsets.UTF_8);
Writer writer = charSink.openStream();
String[] values = new String[]{"foo", "bar","baz"};
Joiner.on("|").appendTo(writer,values);
writer.flush();
writer.close();
String fromFileString = Files.toString(tempFile,Charsets.UTF_8);
assertThat(fromFileString,is("foo|bar|baz"));
}
@Test
public void testJoinStringsSkipNull(){
String[] values = new String[]{"foo",null,"bar"};
String returned = Joiner.on("#").skipNulls().join(values);
assertThat(returned,is("foo#bar"));
}
@Test
public void testJoinStringsUseForNull(){
String[] values = new String[]{"foo",null,"bar"};
String returned = Joiner.on("#").useForNull("missing").join(values);
assertThat(returned,is("foo#missing#bar"));
}
@Test (expected = NullPointerException.class)
public void testJoinStringsNoNullHandler(){
String[] values = new String[]{"foo",null,"bar"};
Joiner.on("#").join(values);
fail("Should not get here");
}
}