guava翻译系列之Joiner

简介: guava翻译系列

基本的guava工具

在前面的章节,我们已经讨论了什么是GUAVA和怎样去安装GUAVA,在这一章我们将开始使用guava,我们将展示guava提供的基本功能,并且了解一下这些基本功能是怎样帮助我们简化日常工作遇到的的问题
在这一章节中,我们将覆盖一下几个方面的内容:

  • 使用Joiner Class 将字符串以指定的分隔符连接起来。 我们也会涉及到使用MapJoiner
  • Splitter Class,和Joiner的作用相反,将一个字符串以给定的分隔符分隔开
  • 使用CharMatcher 和 Strings 类 完成一些基本的操作,比如 将String中的一部分移出,匹配String中的某一部分等等
  • Preconditions Class 提供了一些方法去判断参数,方法,变量是否和你的预期一样
  • 可以和任何一个java对象协作的一些基本的工具类,还有以比较方便的方式实现 Comparable 接口

使用Joiner 类

将一些普通的字符串以固定的分隔符组装在一起是我们在平常工作遇到的,比如将一个Array,List,iterable包含的内容组转成字符串,最常见的就是使用循环将字符串拼接在StringBuilder上,一般的代码如下:

这段代码要注意的就是要将最后一个分隔符去掉。这段代码不是很复杂,但是没有什么价值,完全可以使用Joiner类实现。 下面是一个简单的例子,使用Joiner类以 “|” 将字符串分隔:
Joiner.on("|").skipNulls().join(StringList);
这段代码以简洁明明了的方式实现字符串分隔的功能,降低了代码出错的概率。 如果你需要将List中的null值以一个特殊的值代替,那么可以用下面的代码实现:
Joiner.on("|").userForNull(“no value”).join(stringList).

关于Joiner有如下几点我们需要强调:

  • Joiner Class不仅仅和String[]一起工作,还可以和array iterable,以及数组对象,Joiner返回是循环Object.toString()方法。
  • 如果没有使用skipNulls或者userForNull 那么出现Null时,会出现NullPointException
  • Joiner Class是一个不变类,就像String一样
    `Joiner stringJoiner = Joiner.on("|").skipNulls();

//the useForNull() method returns a new instance
of the Joiner!
stringJoiner.useForNull("missing");
stringJoiner.join("foo","bar",null);`
在这个例子中,useForNull这个方法返回了一个新的Joiner对象,对原来的stringJoiner没有任何影响,因此当运行这个例子的时候,最后一个null对象还是会被忽略,不会变成 missing.

  • Joiner 类不仅仅会返回Strings,而且还能返回StringBuilder
    `StringBuilder stringBuilder = new StringBuilder();

Joiner joiner = Joiner.on("|").skipNulls();
//returns the StringBuilder instance with the values foo,bar,baz
appeneded with "|" delimiters
joiner.appendTo(stringBuilder,"foo","bar","baz")`
在这个例子中,我们传递了个一个StringBuilder的实例给Joiner Class,joiner.appedTo 会将 foo,bar,baz 以 “|”分隔,并将值给stringBuilder.

  • Joiner 类可以和实现了Appendable的实例合作
    `FileWriter fileWriter = new FileWriter(new File("path")):

List dateList = getDates();
Joiner joiner = Joiner.on("#").useForNulls(" ");
//returns the FileWriter instance with the values
appended into it
joiner.appendTo(fileWriter,dateList);`
这里我们看到了一个和上面类似的例子,我们传递一个FileWriter的实例和一个包含了Date的list给Joiner 类,Joiner 类会将包含日期的list追加到FileWriter实例上。

从上面的例子中我们可以看到,Joiner类在处理一些基本任务是非常容易的,并且非常容易的。 在我们将目光离开Joiner类之前,我们来看一个特殊的类 MapJoiner,MapJoiner的使用方式和Joiner差不多,但是有一点不同的是: 他是将key/value以特地的分隔符分隔,创建一个MapJoiner类可以采用如下方式:
mapJoiner = Joiner.on("#").withKeyValueSeparator("=");
让我们快速的看一下这段代码做了什么事:

  • Joiner.on("#") 创建了一个Joiner 对象
  • withKeyValueSeparator方法创建了一个MapJoiner对象

下面是一个例子展示MapJoiner的使用:
`@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 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));
}`

回顾一下Joiner类的使用

前面的单元测试的例子中,我们使用Maps的一个静态工厂类的newLinkedHashMap方法创建了一个LinkedHashMap. 这个方法可以在com.google.common.collect包中找到。 Joiner 类将map中的每个对象以"#"分隔. withKeyValueSeparator 返回MapJoiner类,将map里面的key/value对象以"="分隔。 最后我们使用Assert进行断言。

目录
相关文章
|
4月前
Google Guava ListeningExecutorService
Google Guava ListeningExecutorService
33 0
|
7月前
|
缓存 安全 Java
Google guava工具类的介绍和使用
Google guava工具类的介绍和使用
240 1
|
缓存 安全 Java
谷歌Guava LoadingCache介绍
CacheLoader的作用就是为了在Cache中数据缺失时加载数据,其中最重要的方法就是load()方法,你可以在load() 方法中实现对应key加载数据的逻辑。在调用LoadingCache的get(key)方法时,如果key对应的value不存在,LoadingCache就会调起你在创建cache时传入的CacheLoader的load方法。
234 0
|
缓存
guava翻译系列之Cache
guava翻译系列
2752 0
|
API
Google Guava之Joiner
日常开发中,我们经常需要将几个字符串,或者字符串数组、列表之类的数据,拼接成一个以指定符号分隔各个元素的字符串,比如把[1, 2, 3]拼接成"1-2-3",如果自己实现的话,基本上就需要编写循环去实现这个功能,代码就变得晦涩起来。
229 0
Google Guava之Joiner
|
缓存 安全 Java
《Guava》基础 入门
《Guava》基础 入门
215 0
《Guava》基础 入门
|
Java 程序员 API
谷歌的guava竟然也有坑
谷歌的guava竟然也有坑
367 0
|
Java 测试技术 程序员
Guava翻译系列之File
guava翻译系列
2958 0
|
Java 程序员
Guava翻译之Strings
guava翻译系列
1757 0
|
Java 缓存 设计模式
Guava翻译之Functional
guava翻译系列
1755 0