guava翻译系列之Splitter-阿里云开发者社区

开发者社区> 开发与运维> 正文
登录阅读全文

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类的使用,这两个类应该要放到开发人员的工具箱中。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享: