Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库,例如:集合 [collections] 、缓存 [caching] 、原生类型支持 [primitives support] 、并发库 [concurrency libraries] 、通用注解 [common annotations] 、字符串处理 [string processing] 、I/O 等等。

本文使用的Guava版本如下:

<!--guava-->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>25.1-jre</version>
</dependency>

Object.equals

当一个对象中的字段可以为null时,实现Object.equals方法会很痛苦,因为不得不分别对它们进行null检查。使用Objects.equal帮助你执行null敏感的equals判断,从而避免抛出NullPointerException。例如:

 /*** @param* @return void* @Title:* @methodName: ObjectsTest* @Description:* @author: FLY* @date: 2018-06-23 7:36*/public static void ObjectsTest() {System.out.println(Objects.equal("a", "a")); // returns trueSystem.out.println(Objects.equal(null, "a")); // returns falseSystem.out.println(Objects.equal("a", null)); // returns falseSystem.out.println(Objects.equal(null, null)); // returns true}

Optional

Guava的Optional类似于Java 8新增的Optional类,都是用来处理null的。

Guava用Optional表示可能为null的T类型引用。一个Optional实例可能包含非null的引用(我们称之为引用存在),也可能什么也不包括(称之为引用缺失)。它从不说包含的是null值,而是用存在或缺失来表示。但Optional从不会包含null值引用。

 /*** @param* @return void* @Title:* @methodName: OptionalTest* @Description:* @author: FLY* @date: 2018-06-23 7:44*/public static void OptionalTest() {Integer value1 = null;Integer value2 = 10;/*** 创建指定引用的Optional实例,若引用为null则表示缺失*/Optional<Integer> a = Optional.fromNullable(value1);Optional<Integer> c = Optional.fromNullable(value2);/*** 创建指定引用的Optional实例,若引用为null则快速失败*/// Optional<Integer> b = Optional.of(value1); // java.lang.NullPointerExceptionOptional<Integer> d = Optional.of(value2);//isPresent():如果Optional包含非null的引用(引用存在),返回trueSystem.out.println("a: " + a.isPresent()); // a: falseSystem.out.println("c: " + c.isPresent()); // c: trueSystem.out.println("d: " + d.isPresent());// d: trueInteger value3 = a.or(0);  //返回Optional所包含的引用,若引用缺失,返回指定的值Integer value4 = d.get(); //返回所包含的实例,它必须存在,通常在调用该方法时会调用isPresent()判断是否为nullInteger value5 = value3 + value4;System.out.println(value5); // 10}

Preconditions

前置条件Preconditions提供静态方法来检查方法或构造函数,被调用是否给定适当的参数。它检查的先决条件。其方法失败抛出IllegalArgumentException。

/*** @Title:* @methodName: sumPreconditions* @param a* @param b* @return int* @Description:** @author: FLY* @date: 2018-06-26 6:39*/public static int sumPreconditions(Integer a,Integer b){a=Preconditions.checkNotNull(a,"Illegal Argument passed: First parameter is Null.");b=Preconditions.checkNotNull(b,"Illegal Argument passed: First parameter is Null.");return a+b;}
public static void main(String[] args) {try {sumPreconditions(4,null);} catch (NullPointerException e){System.out.println("【异常了】"+ e.getMessage());//  【异常了】Illegal Argument passed: First parameter is Null.}}

连接器[Joiner]

用分隔符把字符串序列连接起来也可能会遇上不必要的麻烦。如果字符串序列中含有null,那连接操作会更难。Fluent风格的Joiner让连接字符串更简单。

/*** @param* @return void* @Title: 连接器[Joiner]* @methodName: JoinerTest* @Description:* @author: FLY* @date: 2018-06-23 7:44*/public static void JoinerTest() {/*on:制定拼接符号,如:test1-test2-test3 中的 “-“ 符号skipNulls():忽略NULL,返回一个新的Joiner实例useForNull(“Hello”):NULL的地方都用字符串”Hello”来代替*/StringBuilder sb = new StringBuilder();Joiner.on(",").skipNulls().appendTo(sb, "Hello", "Guava");System.out.println("【on:制定拼接符号】:" + sb); // 【on:制定拼接符号】:Hello,GuavaSystem.out.println(Joiner.on(",").useForNull("none").join(1, null, 3));// 1,none,3System.out.println(Joiner.on(",").skipNulls().join(Arrays.asList(1, 2, 3, 4, null, 6)));// 1,2,3,4,6Map<String, String> map = new HashMap<>();map.put("key1", "value1");map.put("key2", "value2");map.put("key3", "value3");System.out.println(Joiner.on("&").withKeyValueSeparator("=").join(map)); // key1=value1&key2=value2&key3=value3}

拆分器[Splitter]

JDK内建的字符串拆分工具有一些古怪的特性。比如,String.split悄悄丢弃了尾部的分隔符。 问题:”,a,,b,”.split(“,”)返回?

/*** @param* @return void* @Title: 拆分器[Splitter]* @methodName: SplitterTest* @Description:* @author: FLY* @date: 2018-06-25 6:00*/public static void SplitterTest() {// JDK内建的字符串拆分工具有一些古怪的特性。比如,String.split悄悄丢弃了尾部的分隔符String[] split = ",a,,b,".split(",");System.out.println(Arrays.toString(split)); // [, a, , b]Iterable<String> splitter = Splitter.on(',').trimResults().omitEmptyStrings().split("the ,quick, , brown         , fox,              jumps, over, the, lazy, little dog.");System.out.println(splitter);// [the, quick, brown, fox, jumps, over, the, lazy, little dog.]}

拆分器工厂

方法 描述 范例
Splitter.on(char) 按单个字符拆分 Splitter.on(‘;’)
Splitter.on(CharMatcher) 按字符匹配器拆分 Splitter.on(CharMatcher.BREAKING_WHITESPACE)
Splitter.on(String) 按字符串拆分 Splitter.on(“,   “)
Splitter.on(Pattern)Splitter.onPattern(String) 按正则表达式拆分 Splitter.onPattern(“\r?\n”)
Splitter.fixedLength(int) 按固定长度拆分;最后一段可能比给定长度短,但不会为空。 Splitter.fixedLength(3)

拆分器修饰符

方法 描述
omitEmptyStrings() 从结果中自动忽略空字符串
trimResults() 移除结果字符串的前导空白和尾部空白
trimResults(CharMatcher) 给定匹配器,移除结果字符串的前导匹配字符和尾部匹配字符
limit(int) 限制拆分出的字符串数量

如果你想要拆分器返回List,只要使用Lists.newArrayList(splitter.split(string))或类似方法。 警告:splitter实例总是不可变的。用来定义splitter目标语义的配置方法总会返回一个新的splitter实例。这使得splitter实例都是线程安全的,你可以将其定义为static final常量。

参考来源:http://ifeve.com/google-guava-using-and-avoiding-null/

参考来源:http://ifeve.com/google-guava-strings/

参考来源:https://www.yiibai.com/guava/guava_collections_utilities.html

Guava基本工具包Base:Null和字符串分割(Splitter)、拼接(Joiner)处理相关推荐

  1. python 中文字符串分割与拼接

    python 中文字符串分割与拼接 1. 中文字符串分割 path = 'D:/硕博/博士生期间资料/机器学习/机器学习课程资料/HW1/data/本纪list格式/高祖本纪.txt' with op ...

  2. python 字符串分割和拼接_python分割和拼接字符串

    关于string的split 和 join 方法 对导入os模块进行os.path.splie()/os.path.join() 貌似是处理机制不一样,但是功能上一样. 1.string.split( ...

  3. c语言 字符串分割与拼接

    介绍一种简单字符串的分割与拼接方法,以修改IP地址为例: #include <stdio.h> int main(void) { char ori_ip[] = "192.168 ...

  4. Javascript:字符串分割split()妙用

    概述: split() 方法将字符串分割为字符串数组,并返回此数组 语法格式: stringObject.split(separator,limit) 参数说明: 注意:如果把空字符串 (" ...

  5. 字符串分割(C++)

    经常碰到字符串分割的问题,这里总结下,也方便我以后使用. 一.用strtok函数进行字符串分割 原型: char *strtok(char *str, const char *delim); 功能:分 ...

  6. [Google Guava] 使用和避免null

    2019独角兽企业重金招聘Python工程师标准>>> 轻率地使用null可能会导致很多令人惊愕的问题.通过学习Google底层代码库,我们发现95%的集合类不接受null值作为元素 ...

  7. 题库练习7(最小公倍数、求立方根、字符串逆序、记负均正、字符串分割)

    1. 求最小公倍数 import java.util.*;public class Main{public static void main(String[] args){Scanner sc=new ...

  8. 【C语言】字符串函数strtok 按照指定字符串分割

    C语言字符串函数 strtok() 函数原型 char *strtok(char *str,const char *delimiters); 参数 str,待分割的字符串 delimiters,分隔符 ...

  9. strtok(), strtok_s() 字符串分割函数

    strtok(), strtok_s() 字符串分割函数 //strtok()函数原型/*_Check_return_ _CRT_INSECURE_DEPRECATE(strtok_s) _CRTIM ...

  10. C++实现字符串分割函数split()

    目录 使用strtok()完成分割 使用strsep()完成分割 使用strtok_r()完成分割 实现字符串分割 前言 最近遇到了一个字符串分割的问题,在C++的标准库里面没有字符分割函数split ...

最新文章

  1. Golang init函数执行顺序
  2. oracle收集统计信息sql,Oracle自动统计信息的收集原理及实验
  3. 国庆中秋活动——让孩子亲近数学并爱上数学:《数学小侦探》来袭(来自科大出版社的福利)
  4. linunx 定位最耗资源的进程
  5. Word中如何保证正文首行缩进其他标题不动
  6. matlab矩阵中每一行数除以一个数
  7. 易语言 html邮件,易语言邮件收发源码
  8. 10.6 全源(All pairs)负权Johnson算法
  9. 硬盘坏了怎么修复 教你如何修复硬盘坏道
  10. Sloth 实战(二)之远程对象
  11. 5种2D Attention整理(Non-Local、Criss-Cross、SE、CBAM、Dual-Attention)
  12. 【ArcGIS】Packaging succeeded,but publishing failed unable to connect to publishing tools service
  13. EasyExcel自定义表头
  14. 【时间序列分析】05.谱函数与谱密度
  15. TX2配置RealSense D455相机SDK和ros驱动
  16. java 闭锁_从火箭发场景来学习Java多线程并发闭锁对象
  17. 移动硬盘弹出时总是显示被占用,解决方案
  18. Android不同手机屏幕分辨率自适应【转】
  19. 软件测试学习笔记:计算机数据计量单位
  20. Java版坦克大战游戏毕业设计

热门文章

  1. win10开始菜单没有反应
  2. 华为云注册登录之图像标签识别
  3. 什么是动态DNS(DDNS)
  4. printf 和 puts
  5. python模拟12306购票_实现12306模拟登录--Python
  6. 远程springmvc ajax请求乱码,网络编程springMVC解决ajax请求乱码的三种方法
  7. 如何在 Excel 图表中添加或删除次坐标轴?
  8. Java程序员“金三银四“就一定要出去面试吗?
  9. python中sinxcosy_∫e^x[(1-cosy)dx-(y-siny)dy],其中c为区域 0≤x≤π,0≤y≤sinx的边界曲线取正向.求曲...
  10. 蓝牙音箱延迟测试软件,首发漫步者Lolli Pods使用感受及延迟测试