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

目录
相关文章
|
算法 Java 决策智能
运筹优化工具库介绍(一)
运筹优化问题有时候极其复杂,我们可以使用运筹优化工具库帮助数学建模,解决复杂的最优化问题,本文介绍几个常见的运筹优化工具库。
3203 0
|
Java 数据安全/隐私保护
SpringBoot - 优雅的实现【参数分组校验】高级进阶
SpringBoot - 优雅的实现【参数分组校验】高级进阶
784 0
关于@NotNull 注解中groups 的使用
关于@NotNull 注解中groups 的使用
1821 0
关于@NotNull 注解中groups 的使用
|
2月前
|
人工智能 弹性计算
Qoder CN的QoderWake是什么?数字员工能7×24小时工作吗?
QoderWake CN是阿里云Qoder CN系列的数字员工子产品,支持云端或本地7×24小时在岗,具备主动思考、多员协同、技能即用、经验沉淀等能力,助力组织“永远在线”。阿里云Qoder CN官网:https://t.aliyun.com/U/fEiOLV
|
4月前
|
人工智能 运维 监控
阿里云百炼大模型平台是什么解析:核心功能、价格体系与配置指南
阿里云百炼大模型平台(Model Studio)是阿里云打造的一站式大模型开发与应用服务平台,面向开发者、企业与业务人员提供全链路AI能力支持。它集成通义千问全系模型与主流第三方大模型,兼容OpenAI API标准,兼顾低代码可视化操作与高代码深度开发,覆盖模型调用、微调训练、知识库构建、智能体开发、应用部署与运维全流程,是企业与个人快速落地AI应用、降低大模型使用门槛的核心工具。
1172 2
|
缓存 关系型数据库 MySQL
Debian 11 x64 安装 MySQL 8.0.33
本文提供了一个逐步指南,介绍了如何在 Debian 11 x64 上下载和安装 MySQL 8.0.33。此外,还提供了允许远程访问的说明。
2758 1
Debian 11 x64 安装 MySQL 8.0.33
ES5常见的数组方法:forEach ,map ,filter ,some ,every ,reduce (除了forEach,其他都有回调,都有return)
ES5常见的数组方法:forEach ,map ,filter ,some ,every ,reduce (除了forEach,其他都有回调,都有return)
710 154
|
JSON Java 数据格式
Java将json中key值下划线转为驼峰格式
Java将json中key值下划线转为驼峰格式
2212 1