概述
Lang3提供了许多Java库无法提供的辅助工具类,比如字符串,数值,反射,序列化等。如果熟练使用该包下的工具类,将节省我们的开发时间,避免重复实现,减少出错的可能。
版本
- 当前版本:3.12.0
- 3.x版本最低支持java7
使用
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
常用的工具类与功能
- 字符串相关操作 StringUtils
- 数字相关操作 NumberUtils
- 布尔相关操作 BooleanUtils
- 反射相关操作 FieldUtils、MethodUtils、MemberUtils、TypeUtils、ConstructorUtils
- 对象相关操作 ObjectUtils
- 序列化相关操作 SerializationUtils
StringUtils
StringUtils是字符串操作的工具类,在我们开发过程中,字符串大概是我们用的最多的变量,对字符串的判空,转换,拼接等都是常用的操作。但JDK自带的方法不够丰富,用法有时也不够方便,所以Apache封装了StringUtils,对JDK进行了额外的补充,功能非常强大。
以下是自己学习记录。
一、对字符串进行校验
1. isBlank()
检查字符串是否为null 或 "" 或 " " (注意 " " 仅为一个或多个空格时才返回true)
System.out.println(StringUtils.isBlank(null)); // true
System.out.println(StringUtils.isBlank(" ")); // true
System.out.println(StringUtils.isBlank("")); //true
源码注释:
2. idNotBlank()
检查字符串是否不为空,与isBlank() 相反。
System.out.println(StringUtils.isNotBlank(null)); // false
System.out.println(StringUtils.isNotBlank(" ")); // false
System.out.println(StringUtils.isNotBlank("")); //false
3. isAnyBlank()
可以对多个字符串进行检查,检查字符串如果有任意一个字符串是空的话,则返回true,否则为false。
System.out.println(StringUtils.isAnyBlank("", "123", " ")); // true
System.out.println(StringUtils.isAnyBlank("123", " 1 ")); // false
4. isAllBlank()
检查一个或多个字符串是否全部为空。
System.out.println(StringUtils.isAllBlank("", "123", " 1 ")); // false
System.out.println(StringUtils.isAllBlank(" ", null)); // true
5. isMubericBlank()
检查字符串是否为数字
System.out.println(StringUtils.isNumeric("123")); // true
System.out.println(StringUtils.isNumeric("a123")); // false
6. isAlpha()
检查是否是字符串
System.out.println(StringUtils.isAlpha(" ")); // false
System.out.println(StringUtils.isAlpha("abc")); // true
7. startsWith()
检查字符串是否以某个字符开头
System.out.println(StringUtils.startsWith("123", "1")); // true
System.out.println(StringUtils.startsWith("123", "")); // true
System.out.println(StringUtils.startsWith("123", "2")); // false
8. endsWith()
判断字符串是否以某个字符结尾
System.out.println(StringUtils.endsWith("123", "")); // true
System.out.println(StringUtils.endsWith("123", "3")); // true
9. 补充 - contains()
判断字符串是否包含 某个 字符
System.out.println(StringUtils.contains("../../name.txt", "..")); // true
二、对字符串进行截取、拼接、转换
1. split()
将字符串按照某个字符进行拆分,返回字符串数组
String str = "1,2,3";
String[] res = StringUtils.split(str, ",");
System.out.println(JSON.toJSONString(res)); // ["1", "2", "3"]
2. chop()
将字符串 的最后一个字符去掉,返回去掉之后的字符串
String str = "1,2,3";
String res = StringUtils.chop(str);
System.out.println(res); // "1,2,"
System.out.println(str); // "1,2,3"
3.chomp()
去掉最后一个换行符
String str = "123\r\n\r\n";
String res = StringUtils.chomp(str);
System.out.println(res); // "123\r\n"
实际效果,有换行符打印如下:
没有换行符,打印如下:
4. join()
把List中的元素,按照某个字符进行拼接,返回拼接好的字符串。
ArrayList<String> l = new ArrayList<String>() {
{add("1");add("2");}
};
System.out.println(StringUtils.join(l, "*")); // 1*2
5. indexOf()
获取某个字符在字符串中的索引位置
String str = "123456";
System.out.println(StringUtils.indexOf(str, "4")); // 3
补充:如果不在字符串中,返回 -1
System.out.println(StringUtils.indexOf("123", "4")); // -1
6. difference()
获取第二个字符串在第一个字符串中不一样的部分(他会从第二个字符串第一位去匹配第一个字符串,是按照顺序去比较的)
String str = "1234569";
System.out.println(StringUtils.difference(str, "789")); // 789
System.out.println(StringUtils.difference(str, "1039")); // 039