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 决策智能
运筹优化工具库介绍(一)
运筹优化问题有时候极其复杂,我们可以使用运筹优化工具库帮助数学建模,解决复杂的最优化问题,本文介绍几个常见的运筹优化工具库。
2731 0
|
8月前
|
数据安全/隐私保护 Ruby 容器
「IRB合规型科研协作工具」的双盲评审模块设计与GDPR日志架构
科研项目常因文献、数据与任务管理脱节导致内耗。本文从“文献管理+数据共享+任务协同”三方面,测评5款开源工具,助力团队提升协作效率,降低成本。
「IRB合规型科研协作工具」的双盲评审模块设计与GDPR日志架构
|
前端开发 搜索推荐 测试技术
React 数据表格排序与过滤
本文介绍了如何在 React 中实现数据表格的排序和过滤功能,从基础概念到实际代码实现,涵盖排序和过滤的基本原理、实现步骤、常见问题及解决方法。通过合理管理状态、优化性能和避免常见错误,帮助开发者提高用户体验和开发效率。
289 5
|
缓存 关系型数据库 MySQL
Debian 11 x64 安装 MySQL 8.0.33
本文提供了一个逐步指南,介绍了如何在 Debian 11 x64 上下载和安装 MySQL 8.0.33。此外,还提供了允许远程访问的说明。
2595 1
Debian 11 x64 安装 MySQL 8.0.33
|
测试技术 Python
在pycharm中文件取消用 pytest模式打开的操作
在pycharm中文件取消用 pytest模式打开的操作
1626 0
 在pycharm中文件取消用 pytest模式打开的操作
|
数据采集 SQL 关系型数据库
在 MySQL 中使用 Union
【8月更文挑战第11天】
1316 0
在 MySQL 中使用 Union
|
JavaScript 应用服务中间件 nginx
Vue项目部署Nginx后,刷新页面出现404问题
Vue项目部署Nginx后,刷新页面出现404问题
602 0
|
人工智能 移动开发 小程序
uniapp框架——vue3+uniFilePicker+fastapi实现文件上传(搭建ai项目第二步)
uniapp框架——vue3+uniFilePicker+fastapi实现文件上传(搭建ai项目第二步)
1020 2