12.17个提升开发效率的“轮子”(2)

5. BooleanUtils

在java中布尔值,随处可见。

如果你使用了布尔的包装类:Boolean,总感觉有点麻烦,因为它有三种值:nulltruefalse。我们在处理Boolean对象时,需要经常判空。

头疼!!!

但如果使用BooleanUtils类处理布尔值,心情一下子就愉悦起来了。

5.1 判断true或false

如果你想判断某个参数的值是true或false,可以直接使用isTrueisFalse方法。例如:

1 Boolean aBoolean = new Boolean(true);
2 System.out.println(BooleanUtils.isTrue(aBoolean));
3 System.out.println(BooleanUtils.isFalse(aBoolean));

5.2 判断不为true或不为false

有时候,需要判断某个参数不为true,即是null或者false。或者判断不为false,即是null或者true。

可以使用isNotTrueisNotFalse方法。例如:

1 Boolean aBoolean = new Boolean(true);
2 Boolean aBoolean1 = null;
3 System.out.println(BooleanUtils.isNotTrue(aBoolean));
4 System.out.println(BooleanUtils.isNotTrue(aBoolean1));
5 System.out.println(BooleanUtils.isNotFalse(aBoolean));
6 System.out.println(BooleanUtils.isNotFalse(aBoolean1));

执行结果:

false
true
true
true

5.3 转换成数字

如果你想将true转换成数字1,false转换成数字0,可以使用toInteger方法:

1 Boolean aBoolean = new Boolean(true);
2 Boolean aBoolean1 = new Boolean(false);
3 System.out.println(BooleanUtils.toInteger(aBoolean));
4 System.out.println(BooleanUtils.toInteger(aBoolean1));

执行结果:

1
0

5.4 Boolean转换成布尔值

我们有时候需要将包装类Boolean对象,转换成原始的boolean对象,可以使用toBoolean方法。例如:

1 Boolean aBoolean = new Boolean(true);
2 Boolean aBoolean1 = null;
3 System.out.println(BooleanUtils.toBoolean(aBoolean));
4 System.out.println(BooleanUtils.toBoolean(aBoolean1));
5 System.out.println(BooleanUtils.toBooleanDefaultIfNull(aBoolean1, false));

我们无需额外的判空了,而且还可以设置Boolean对象为空时返回的默认值。

BooleanUtils类的方法还有很多,有兴趣的小伙伴可以看看下面的内容:

6. StringUtils

字符串(String)在我们的日常工作中,用得非常非常非常多。

在我们的代码中经常需要对字符串判空,截取字符串、转换大小写、分隔字符串、比较字符串、去掉多余空格、拼接字符串、使用正则表达式等等。

如果只用String类提供的那些方法,我们需要手写大量的额外代码,不然容易出现各种异常。

现在有个好消息是:org.apache.commons.lang3包下的StringUtils工具类,给我们提供了非常丰富的选择。

6.1 字符串判空

其实空字符串,不只是null一种,还有""," ","null"等等,多种情况。

StringUtils给我们提供了多个判空的静态方法,例如:

 1  String str1 = null;
 2 String str2 = "";
 3 String str3 = " ";
 4 String str4 = "abc";
 5 System.out.println(StringUtils.isEmpty(str1));
 6 System.out.println(StringUtils.isEmpty(str2));
 7 System.out.println(StringUtils.isEmpty(str3));
 8 System.out.println(StringUtils.isEmpty(str4));
 9 System.out.println("=====");
10 System.out.println(StringUtils.isNotEmpty(str1));
11 System.out.println(StringUtils.isNotEmpty(str2));
12 System.out.println(StringUtils.isNotEmpty(str3));
13 System.out.println(StringUtils.isNotEmpty(str4));
14 System.out.println("=====");
15 System.out.println(StringUtils.isBlank(str1));
16 System.out.println(StringUtils.isBlank(str2));
17 System.out.println(StringUtils.isBlank(str3));
18 System.out.println(StringUtils.isBlank(str4));
19 System.out.println("=====");
20 System.out.println(StringUtils.isNotBlank(str1));
21 System.out.println(StringUtils.isNotBlank(str2));
22 System.out.println(StringUtils.isNotBlank(str3));
23 System.out.println(StringUtils.isNotBlank(str4));

执行结果:

true
true
false
false
=====
false
false
true
true
=====
true
true
true
false
=====
false
false
false
true

示例中的:isEmptyisNotEmptyisBlankisNotBlank,这4个判空方法你们可以根据实际情况使用。

优先推荐使用isBlankisNotBlank方法,因为它会把" "也考虑进去。

6.2 分隔字符串

分隔字符串是常见需求,如果直接使用String类的split方法,就可能会出现空指针异常。

1 String str1 = null;
2 System.out.println(StringUtils.split(str1,","));
3 System.out.println(str1.split(","));

执行结果:

1 null
2 Exception in thread "main" java.lang.NullPointerException
3  at com.sue.jump.service.test1.UtilTest.main(UtilTest.java:21)

使用StringUtils的split方法会返回null,而使用String的split方法会报指针异常。

6.3 判断是否纯数字

给定一个字符串,判断它是否为纯数字,可以使用isNumeric方法。例如:

1 String str1 = "123";
2 String str2 = "123q";
3 String str3 = "0.33";
4 System.out.println(StringUtils.isNumeric(str1));
5 System.out.println(StringUtils.isNumeric(str2));
6 System.out.println(StringUtils.isNumeric(str3));

执行结果:

true
false
false

6.4 将集合拼接成字符串

有时候,我们需要将某个集合的内容,拼接成一个字符串,然后输出,这时可以使用join方法。例如:

1 List<String> list = Lists.newArrayList("a", "b", "c");
2 List<Integer> list2 = Lists.newArrayList(1, 2, 3);
3 System.out.println(StringUtils.join(list, ","));
4 System.out.println(StringUtils.join(list2, " "));

执行结果:

a,b,c
1 2 3

7. Assert

很多时候,我们需要在代码中做判断:如果不满足条件,则抛异常。

有没有统一的封装呢?

其实spring给我们提供了Assert类,它表示断言

7.1 断言参数是否为空

断言参数是否空,如果不满足条件,则直接抛异常。

1 String str = null;
2 Assert.isNull(str, "str必须为空");
3 Assert.isNull(str, () -> "str必须为空");
4 Assert.notNull(str, "str不能为空");

如果不满足条件就会抛出IllegalArgumentException异常。

7.2 断言集合是否为空

断言集合是否空,如果不满足条件,则直接抛异常。

1 List<String> list = null;
2 Map<String, String> map = null;
3 Assert.notEmpty(list, "list不能为空");
4 Assert.notEmpty(list, () -> "list不能为空");
5 Assert.notEmpty(map, "map不能为空");

如果不满足条件就会抛出IllegalArgumentException异常。

7.3 断言条件是否为空

断言是否满足某个条件,如果不满足条件,则直接抛异常。

1 List<String> list = null;
2 Assert.isTrue(CollectionUtils.isNotEmpty(list), "list不能为空");
3 Assert.isTrue(CollectionUtils.isNotEmpty(list), () -> "list不能为空");

当然Assert类还有一些其他的功能,这里就不多介绍了。

 

posted @ 2022-10-30 14:34  midiyu  阅读(50)  评论(0编辑  收藏  举报