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

目录
相关文章
|
2月前
|
缓存 Java API
Guava极简教程 - Joiner和Splitter
Guava是Google开发的一个开源Java库,增强了Java标准库的核心功能。它提供了多种工具和集合类,如不可变集合、多映射、缓存、并发工具、字符串处理、I/O工具、哈希与编码、范围、图形数据结构及参数验证等,使开发更高效、代码更简洁。`Joiner`用于将集合转换为字符串,支持分隔符和键值分隔符自定义;`Splitter`则用于将字符串拆分为集合,支持多个分隔符和空字符串忽略。更多详情及示例代码可见:[项目地址](https://gitee.com/naylor_personal/ramble-spring-boot/tree/master/guava)。
51 0
|
API
Google Guava之Splitter
我们上篇文章讲述了Joiner相关API使用,其中提到了Splitter,它与Joiner操作相反,它是根据给定的分隔符,把一个字符串分隔成若个子字符串,那么本篇我们来看看Splitter都有哪些操作的方式。
220 0
Google Guava之Splitter
|
缓存
guava翻译系列之Cache
guava翻译系列
2752 0
|
缓存 移动开发 安全
Guava基本工具包Base:Null和字符串分割(Splitter)、拼接(Joiner)处理
Guava基本工具包Base:Null和字符串分割(Splitter)、拼接(Joiner)处理
468 0
Guava基本工具包Base:Null和字符串分割(Splitter)、拼接(Joiner)处理
|
机器学习/深度学习 自然语言处理 算法
Hanlp中使用纯JAVA实现CRF分词
与基于隐马尔可夫模型的最短路径分词、N-最短路径分词相比,基于条件随机场(CRF)的分词对未登录词有更好的支持。本文(HanLP)使用纯Java实现CRF模型的读取与维特比后向解码,内部特征函数采用 双数组Trie树(DoubleArrayTrie)储存,得到了一个高性能的中文分词器。
4776 1
|
Java 程序员
Guava翻译之Strings
guava翻译系列
1757 0
|
Java 缓存 设计模式
Guava翻译之Functional
guava翻译系列
1755 0
|
Java 测试技术 程序员
Guava翻译系列之File
guava翻译系列
2955 0
|
自然语言处理
Ansj与hanlp分词工具对比
一、Ansj1、利用DicAnalysis可以自定义词库: 2、但是自定义词库存在局限性,导致有些情况无效:比如:“不好用“的正常分词结果:“不好,用”。 (1)当自定义词库”好用“时,词库无效,分词结果不变。
1133 0
|
自然语言处理 Java Maven
HanLP中文分词Lucene插件
基于HanLP,支持包括Solr(7.x)在内的任何基于Lucene(7.x)的系统。
2015 0