Guava是Google开源的一款工具类库,可以更方便的处理字符串、集合、文件、缓存等方面的功能,并且是面向函数式编程的方式,使用更方面,并且也相对更优雅,增加开发效率,在功能方面和apache-common差不多
Java8实现字符串操作
先看看使用Java8对字符串是如何操作
拼接字符串
private static final List<String> stringlist = Arrays.asList("Java", "Js", "Guava");public void testJoinByJava8() {String str = stringlist.stream().collect(Collectors.joining("#"));assertThat(str, equalTo("Java#Js#Guava"));}
使用stream
操作可以快速的完成字符串的拼接操作
过滤Null进行字符串拼接
private static final List<String> stringListWithNull = Arrays.asList("Java", "Js", "Guava", null);public void testJoinFilterNullByJava8() {String str = stringListWithNull.stream().filter(item -> item != null && !item.isEmpty()).collect(Collectors.joining("#"));assertThat(str, equalTo("Java#Js#Guava"));}
使用stream
操作,也可以很方便
将Null值替换为默认值进行拼接
private static final List<String> stringlist = Arrays.asList("Java", "Js", "Guava");public void testJoinReplaceNullByJava8() {String str = stringListWithNull.stream().map(item -> item != null && !item.isEmpty() ? item : "DEFAULT").collect(Collectors.joining("#"));assertThat(str, equalTo("Java#Js#Guava#DEFAULT"));}
Java8对字符串的操作也是较为方便,可以快速完成对应的字符串需要的功能
Joiner类简介
Joiner通过工厂模式创建对象,并提供高效、便捷的方法可以快速实现功能
``
字符串拼接
private static final List<String> stringlist = Arrays.asList("Java", "Js", "Guava");public void testJoinOnJoin() {// 拼接字符串String str = Joiner.on("#").join(stringlist);assertThat(str, equalTo("Java#Js#Guava"));}
通过on
创建Joiner对象,并通过join
方法来进行拼接,通过链式调用完成操作
通过append拼接字符串
private static final List<String> stringlist = Arrays.asList("Java", "Js", "Guava");public void testJoinOnAppend() {StringBuilder builder = new StringBuilder();StringBuilder builder1 = Joiner.on("#").appendTo(builder, stringlist);// 返回的是同一个对象,并不是新创建了StringBuilder对象assertThat(builder, sameInstance(builder1)); // trueassertThat(builder1.toString(), equalTo("Java#Js#Guava"));assertThat(builder.toString(), equalTo("Java#Js#Guava"));}
通过append
拼接字符串需要传递StringBuilder
对象,并且返回一个StringBuilder
对象,并且传递的对象和返回的对象是同一个对象
join()
方法内部也是通过append()
方法实现,只是做了一层封装
过滤Null拼接字符串
private static final List<String> stringListWithNull = Arrays.asList("Java", "Js", "Guava", null);public void testJoinOnJoinWithNull() {String str = Joiner.on("#").skipNulls().join(stringListWithNull);assertThat(str, equalTo("Java#Js#Guava"));}
通过on
创建joiner
对象之后,可以通过skipNulls
方法来指定过滤NUll
值,只拼接非空字符串
替换Null进行字符串拼接
private static final List<String> stringListWithNull = Arrays.asList("Java", "Js", "Guava", null);public void testJoinOnJoinWithNullReplace() {String str = Joiner.on("#").useForNull("DEFAULT").join(stringListWithNull);assertThat(str, equalTo("Java#Js#Guava#DEFAULT"));}
通过useForNull()
函数指定替换的默认值,来进行字符的拼接并过滤掉Null
将字符串输出到文件
private static final List<String> stringListWithNull = Arrays.asList("Java", "Js", "Guava", null);private static final String fileName = "D:\\test\\joiner.txt";public void testJoinOnAppendToWriter() {try(FileWriter writer = new FileWriter(new File(fileName))) {Joiner.on("#").useForNull("DEFAULT").appendTo(writer, stringListWithNull);assertThat(Files.isFile().test(new File(fileName)), equalTo(true));} catch (IOException e) {fail("joiner writer error");}}
通过appendTo
可以将拼接的字符串写入到流中
内部时通过
FileWriter
的append
方法将字符串写入到文件中
Map集合拼接字符串
private static final Map<String, String> map = ImmutableMap.of("Hello", "Guava", "Google", "Library");public void testJoinOnJoinWithMap() {String str = Joiner.on("#").withKeyValueSeparator("=").join(map);assertThat(str, equalTo("Hello=Guava#Google=Library"));}
通过withKeyValueSeparator
方法指定map集合的key-value之间的关联字符,可以使用=
或者!
来制定key和value中间的连接符
通过Java8和Joiner的操作字符串的方式来看,Joiner
提供了部分的封装和使用了更为巧妙的设计模式和函数式的风格,而通常来讲Java8中的原生方式也是经常使用,不过也可以尝试使用Joiner
来完成字符串的操作,并且使用Guava还有其他的工具方式来使用~