guava翻译系列之Splitter

简介: guava翻译系列

使用Splitter类

另一个常见的操作就是解析一个以固定分隔符分隔的字符串,并返回一个包含这个String的数组,如果你需要去阅读一个text文件,你会经常要处理这种情况。但是String.split方法还有一些可以改进的地方,就像下面的例子所展示的:
`String testString = "Monday,Tuesday,,Thursday,Friday,,";
//parts is [Monday, Tuesday, , Thursday,Friday]
String[] parts = testString.split(",");`
从上面的例子中你可以看到String.split方法默认将最后连个空的字符串去除了,在有些情况下你是希望这么做的。但是这样并不是特别好,这样的选择应该留给程序员去处理。Splitter类可以协助去处理这样的情况。 Splitter 类的作用刚好和Joiner相反,Spliter 类可以使用在 字符,固定的字符串,正则表达式,CharMatcher类(下面我们会介绍这个类). 通过调用Splitter类的on方法,可以获取Splitter实例,一旦创建了Splitter类,就可以调用split方法,spliter方法会返回一个包含了结果的可迭代对象.

`Splitter.on('|').split("foo|bar|baz");
Splitter splitter = Splitter.on("\d+");`

  • 上面的例子,我们看到一个Splitter实例使用'|'分隔,另外一个splitter使用了一个正则表达式
  • Splitter 类还有一个选项可以将字符串中的空白字符去除。 效果就想String.split。只要使用 trimResults()
    `//Splits on '|' and removes any leading or trailing whitespace

Splitter splitter = Splitter.on('|').trimResults();`

  • 就像Joiner类一样,Splitter类是一个不可变类。所以千万不要单独的去调用trimResults方法,这样并不能在原始的splitter类上起作用。 就像下面的这个例子:
    `Splitter splitter = Splitter.on('|');

//Next call returns a new instance, does not
modify the original!
splitter.trimResults();
//Result would still contain empty elements
Iterable parts = splitter.split("1|2|3|||");`

  • Joiner类有一个与之对应的MapJoiner,Splitter类也有一个MapSplitter类。MapSplitter的作用刚好和MapJoiner类的作用相反,具体的可以看一下下面的例子:
    `//MapSplitter is defined as an inner class of Splitter

Splitter.MapSplitter mapSplitter = Splitter.on("#").
withKeyValueSeparator("=");`
就像我们所看到的一样,MapSplitter的创建和MapJoiner类一样,先创建一个Splitter类,然后通过一个指定一个特定的分隔符得到一个MapSplitter对象。
`@Test
public void testSplitter() {
String startString = "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");
Splitter.MapSplitter mapSplitter =
Splitter.on("#").withKeyValueSeparator("=");
Map splitMap =
mapSplitter.split(startSring);
assertThat(testMap,is(splitMap));
}`

Splitter类使用回顾

上面的单元测试类,使用一个String对象,并且使用MapSplitter类创建一个LinkedHashMap实例。
这里我们覆盖了Joiner类和Splitter类的使用,这两个类应该要放到开发人员的工具箱中。

目录
相关文章
|
5月前
|
Java
Guava Lists工具类
Guava Lists工具类
37 0
|
API
Google Guava之Splitter
我们上篇文章讲述了Joiner相关API使用,其中提到了Splitter,它与Joiner操作相反,它是根据给定的分隔符,把一个字符串分隔成若个子字符串,那么本篇我们来看看Splitter都有哪些操作的方式。
170 0
Google Guava之Splitter
|
缓存 移动开发 安全
Guava基本工具包Base:Null和字符串分割(Splitter)、拼接(Joiner)处理
Guava基本工具包Base:Null和字符串分割(Splitter)、拼接(Joiner)处理
357 0
Guava基本工具包Base:Null和字符串分割(Splitter)、拼接(Joiner)处理
|
缓存
guava翻译系列之Cache
guava翻译系列
2695 0
|
Java 程序员
Guava翻译之Strings
guava翻译系列
1707 0