guava翻译系列之Joiner

简介: guava翻译系列

基本的guava工具

在前面的章节,我们已经讨论了什么是GUAVA和怎样去安装GUAVA,在这一章我们将开始使用guava,我们将展示guava提供的基本功能,并且了解一下这些基本功能是怎样帮助我们简化日常工作遇到的的问题
在这一章节中,我们将覆盖一下几个方面的内容:

  • 使用Joiner Class 将字符串以指定的分隔符连接起来。 我们也会涉及到使用MapJoiner
  • Splitter Class,和Joiner的作用相反,将一个字符串以给定的分隔符分隔开
  • 使用CharMatcher 和 Strings 类 完成一些基本的操作,比如 将String中的一部分移出,匹配String中的某一部分等等
  • Preconditions Class 提供了一些方法去判断参数,方法,变量是否和你的预期一样
  • 可以和任何一个java对象协作的一些基本的工具类,还有以比较方便的方式实现 Comparable 接口

使用Joiner 类

将一些普通的字符串以固定的分隔符组装在一起是我们在平常工作遇到的,比如将一个Array,List,iterable包含的内容组转成字符串,最常见的就是使用循环将字符串拼接在StringBuilder上,一般的代码如下:

这段代码要注意的就是要将最后一个分隔符去掉。这段代码不是很复杂,但是没有什么价值,完全可以使用Joiner类实现。 下面是一个简单的例子,使用Joiner类以 “|” 将字符串分隔:
Joiner.on("|").skipNulls().join(StringList);
这段代码以简洁明明了的方式实现字符串分隔的功能,降低了代码出错的概率。 如果你需要将List中的null值以一个特殊的值代替,那么可以用下面的代码实现:
Joiner.on("|").userForNull(“no value”).join(stringList).

关于Joiner有如下几点我们需要强调:

  • Joiner Class不仅仅和String[]一起工作,还可以和array iterable,以及数组对象,Joiner返回是循环Object.toString()方法。
  • 如果没有使用skipNulls或者userForNull 那么出现Null时,会出现NullPointException
  • Joiner Class是一个不变类,就像String一样
    `Joiner stringJoiner = Joiner.on("|").skipNulls();

//the useForNull() method returns a new instance
of the Joiner!
stringJoiner.useForNull("missing");
stringJoiner.join("foo","bar",null);`
在这个例子中,useForNull这个方法返回了一个新的Joiner对象,对原来的stringJoiner没有任何影响,因此当运行这个例子的时候,最后一个null对象还是会被忽略,不会变成 missing.

  • Joiner 类不仅仅会返回Strings,而且还能返回StringBuilder
    `StringBuilder stringBuilder = new StringBuilder();

Joiner joiner = Joiner.on("|").skipNulls();
//returns the StringBuilder instance with the values foo,bar,baz
appeneded with "|" delimiters
joiner.appendTo(stringBuilder,"foo","bar","baz")`
在这个例子中,我们传递了个一个StringBuilder的实例给Joiner Class,joiner.appedTo 会将 foo,bar,baz 以 “|”分隔,并将值给stringBuilder.

  • Joiner 类可以和实现了Appendable的实例合作
    `FileWriter fileWriter = new FileWriter(new File("path")):

List dateList = getDates();
Joiner joiner = Joiner.on("#").useForNulls(" ");
//returns the FileWriter instance with the values
appended into it
joiner.appendTo(fileWriter,dateList);`
这里我们看到了一个和上面类似的例子,我们传递一个FileWriter的实例和一个包含了Date的list给Joiner 类,Joiner 类会将包含日期的list追加到FileWriter实例上。

从上面的例子中我们可以看到,Joiner类在处理一些基本任务是非常容易的,并且非常容易的。 在我们将目光离开Joiner类之前,我们来看一个特殊的类 MapJoiner,MapJoiner的使用方式和Joiner差不多,但是有一点不同的是: 他是将key/value以特地的分隔符分隔,创建一个MapJoiner类可以采用如下方式:
mapJoiner = Joiner.on("#").withKeyValueSeparator("=");
让我们快速的看一下这段代码做了什么事:

  • Joiner.on("#") 创建了一个Joiner 对象
  • withKeyValueSeparator方法创建了一个MapJoiner对象

下面是一个例子展示MapJoiner的使用:
`@Test
public void testMapJoiner() {
//Using LinkedHashMap so that the original
order is preserved
String expectedString = "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");
String returnedString = Joiner.on("#").
withKeyValueSeparator("=").join(testMap);
assertThat(returnedString,is(expectedString));
}`

回顾一下Joiner类的使用

前面的单元测试的例子中,我们使用Maps的一个静态工厂类的newLinkedHashMap方法创建了一个LinkedHashMap. 这个方法可以在com.google.common.collect包中找到。 Joiner 类将map中的每个对象以"#"分隔. withKeyValueSeparator 返回MapJoiner类,将map里面的key/value对象以"="分隔。 最后我们使用Assert进行断言。

目录
相关文章
|
运维 Linux Docker
Docker详解(十三)——Docker容器的内存和磁盘I/O限制配置
Docker详解(十三)——Docker容器的内存和磁盘I/O限制配置
1698 1
|
监控 安全 应用服务中间件
微服务架构下的API网关设计策略与实践####
本文深入探讨了在微服务架构下,API网关作为系统统一入口点的设计策略、实现细节及其在实际应用中的最佳实践。不同于传统的摘要概述,本部分将直接以一段精简的代码示例作为引子,展示一个基于NGINX的简单API网关配置片段,随后引出文章的核心内容,旨在通过具体实例激发读者兴趣,快速理解API网关在微服务架构中的关键作用及实现方式。 ```nginx server { listen 80; server_name api.example.com; location / { proxy_pass http://backend_service:5000;
|
机器学习/深度学习 搜索推荐 算法
降维·预测·救命:PCA、随机森林与乳腺癌
降维·预测·救命:PCA、随机森林与乳腺癌
576 1
|
缓存 监控 网络协议
2022年最受工程师欢迎的10款抓包工具有哪些?不止Wireshark和Tcpdump哦!
网络嗅探器在日常工作中经常使用,通常情况下,我们叫做“抓包工具”,不管是软件开发、还是网络工程师,抓包解决一些问题已经称为最正常不过的操作。
2116 0
2022年最受工程师欢迎的10款抓包工具有哪些?不止Wireshark和Tcpdump哦!
|
JSON Ubuntu Linux
Docker:镜像加速器
Docker:镜像加速器
Docker:镜像加速器
|
算法
阿里资深校招面试官:4点建议,助你走进阿里
春暖花开的季节,阿里巴巴的春招面试正如火如荼地进行着。相信同学们也在面试这块做了许多准备,那么,参加阿里的面试需要注意些什么?今天,我们特别邀请到资深终面官永叔给同学们送上最实用的面试秘籍。
6610 0
|
6天前
|
云安全 人工智能 运维
当攻击全面Agent化,你的安全防御能否跟上AI Speed?
多起客户侧AK泄露事件应急的真实观察
1298 6
|
5天前
|
人工智能 API 开发工具
DeepSeek Harness 神插件:白嫖 13 家大厂模型
`dsh-our-free-model` 是 DeepSeek Harness 神级插件:零配置、零API Key、零账号,聚合13家大厂免费模型(含DeepSeek V4.1 Flash、Kimi K3等),支持本地网关、用量看板与自动降级,真正实现“白嫖即用”。
|
9天前
|
存储 人工智能 安全
千问办公官网入口网页版登录:qwenwork.cn 注册送2000积分、登录送100积分
阿里云千问办公(QwenWork)是AI智能工作平台,支持一句话生成PPT、表格、网页、视频及数据分析。个人免费版送2000积分+每日登录赠100分,含1GB存储、5个发布页;企业版198元/席/月起。阿里千问办公QwenWork官网:https://t.aliyun.com/U/0VCTGt 阿里AI工作平台,一句话完成数据分析、PPT 生成、视频剪辑、网页搭建等复杂任务
|
29天前
|
人工智能 JSON API
全网刷屏的 Jev 模型正式开放!一手实战测评 + 保姆级教程
全网爆火的 Jev 模型是什么?有什么用?怎么使用?怎么接入 AI 编程工具?效果真的好么?傻子可懂的 Jev 保姆级实战教程 + 项目实战测评来啦
9903 33