前言
大家好,我是爷爷的茶七里香,最近整理了一份apache下的StringUtils工具类的使用,有不对的地方还请明确指出,万分感谢!
正文(官网文档)
序号 | 方法 | 解释 | 例子 |
---|---|---|---|
1 | isEmpty/isBlank | 检查字符串是否为空 | 查看 |
2 | trim/strip | 去除字符串前后的空格 | 查看 |
3 | equals/compare | 比较两个字符串是否相等 | 查看 |
4 | startsWith | 检查字符串是否以指定字符开头 | 查看 |
5 | endsWith | 检查字符串是否以指定字符结尾 | 查看 |
6 | indexOf/lastIndexOf/contains | 判断是否包含指定字符 | 查看 |
7 | indexOfAny/lastIndexOfAny/indexOfAnyBut | 任意一组字符串的索引 | 查看 |
8 | containsOnly/containsNone/containsAny | 字符串是否仅包含/无/这些字符中的任何一个 | 查看 |
9 | substring/left/right/mid | 根据索引对字符串的提取 | 查看 |
10 | substringBefore/substringAfter/substringBetween | 提取指定字符前/后/中的字符 | 查看 |
11 | split/join | 将字符串拆分为字符串数组,反之拼接 | 查看 |
12 | remove/deleteWhitespace | 字符串的删除操作 | 查看 |
13 | replace/overlay | 搜索字符串,然后用另一个字符串替换 | 查看 |
14 | chop | 删除字符串的最后一部分 | 查看 |
15 | appendIfMissing | 如果不存在后缀,则在字符串的末尾附加一个后缀 | 查看 |
16 | prependIfMissing | 如果不存在前缀,则在字符串的开头添加前缀 | 查看 |
17 | leftPad/rightPad/center/repeat | 填充字符串 | 查看 |
18 | upperCase/lowerCase/swapCase/capitalize/uncapitalize | 更改字符串的大小写 | 查看 |
19 | countMatches | 计算指定字符在另一个字符串中出现的次数 | 查看 |
20 | isAlpha/isNumeric/isWhitespace/isAsciiPrintable | 检查字符串中的字符 | 查看 |
21 | defaultString | 防止输入字符串为空 | 查看 |
22 | rotate | 旋转(循环移位)字符串 | 查看 |
23 | reverse/reverseDelimited | 反转字符串 | 查看 |
24 | abbreviate | 字符串多余的省略号显示 | 查看 |
25 | difference | 比较字符串差异 | 查看 |
isEmpty/isBlank【判断是否为空】
// null的情况
String str1 = null;
System.out.println("str2 isEmpty->"+StringUtils.isEmpty(str1));
System.out.println("str2 isBlank->"+StringUtils.isBlank(str1));
// 不是空格的情况
String str2 = "";
System.out.println("str1 isEmpty->"+StringUtils.isEmpty(str2));
System.out.println("str1 isBlank->"+StringUtils.isBlank(str2));
// 空格的情况
String str3 = " ";
System.out.println("str2 isEmpty->"+StringUtils.isEmpty(str3));
System.out.println("str2 isBlank->"+StringUtils.isBlank(str3));
输出结果:
str1 isEmpty->true
str1 isBlank->true
str2 isEmpty->true
str2 isBlank->true
str3 isEmpty->false
str3 isBlank->true
区别:
- isEmpty方法判断空格的时候,认为这是不属于空值的!
trim/strip【去除字符串前后的空格】
// trim
String str1 = " abc ";
System.out.println("使用trim去除前"+str1+"使用trim去除前");
System.out.println("使用trim去除后"+StringUtils.trim(str1)+"使用trim去除后");
// strip
String str2 = " efg ";
System.out.println("使用strip去除前"+str2+"使用strip去除前");
System.out.println("使用strip去除后"+StringUtils.strip(str2)+"使用strip去除后");
输出结果:
使用trim去除前 abc 使用trim去除前
使用trim去除后abc使用trim去除后
使用strip去除前 efg 使用strip去除前
使用strip去除后efg使用strip去除后
区别:
- trim可以去除半角的空格;
- strip既可以去除半角空格也可以去除全角空格;
equals/compare【判断两个字符串是否相等】
String str1 = "abc";
String str2 = "abc";
System.out.println("两个字符串相同的情况:"+StringUtils.equals(str1,str2));
System.out.println("两个字符串相同的情况:"+StringUtils.compare(str1,str2));
String str3 = "abc";
String str4 = "cde";
System.out.println("两个字符串不同的情况:"+StringUtils.equals(str3,str4));
System.out.println("两个字符串不同的情况:"+StringUtils.compare(str3,str4));
输出结果:
两个字符串相同的情况:true
两个字符串相同的情况:0
两个字符串不同的情况:false
两个字符串不同的情况:-2
区别:
- compare比较两个字符串相同的时候为0;
- equals返回的是boolean类型;
startsWith【检查字符串是否以指定字符开头】
String str1 = "abc";
System.out.println("是否以s开头:"+StringUtils.startsWith(str1, "s"));
System.out.println("是否以a开头:"+StringUtils.startsWith(str1, "a"));
输出结果:
是否以s开头:false
是否以a开头:true
endsWith【检查字符串是否以指定字符结尾】
String str1 = "abc";
System.out.println("是否以s结尾:"+StringUtils.endsWith(str1, "s"));
System.out.println("是否以c结尾:"+StringUtils.endsWith(str1, "c"));
输出结果:
是否以s结尾:false
是否以c结尾:true
indexOf/lastIndexOf/contains【判断是否包含指定字符】
String str1 = "abc";
System.out.println("从左到右查找:"+StringUtils.indexOf(str1, "a"));
System.out.println("从右到左查找:"+StringUtils.lastIndexOf(str1, "b"));
System.out.println("是否包含指定字符:"+StringUtils.contains(str1, "c"));
输出结果:
从左到右查找:0
从右到左查找:1
是否包含指定字符:true
区别:
- indexOf是从左到右查找;
- lastIndexOf是从右到左查找;
- 以上两者都是找到指定字符就会返回该字符的下标,找不到就返回-1;
- contains是查找是否包含指定字符返回boolean类型;
indexOfAny/lastIndexOfAny/indexOfAnyBut【任意一组字符串的索引】
String str1 = "aabcabbb";
System.out.println("最早出现字符a的下标:"+StringUtils.indexOfAny(str1, "a"));
System.out.println("最晚出现字符a的下标:"+StringUtils.lastIndexOfAny(str1, "a"));
System.out.println("以a开头的次数:"+StringUtils.indexOfAnyBut(str1, "a"));
- 输出结果:
最早出现字符a的下标:0
最晚出现字符a的下标:4
以a开头的次数:2
区别:
- indexOfAny是最早出现指定字符的下标;
- lastIndexOfAny则是最晚出现指定字符的下标;
- indexOfAnyBut是以指定字符开头的次数;
containsOnly/containsNone/containsAny【字符串是否仅包含/无/这些字符中的任何一个】
String str1 = "aabcabbb";
System.out.println("aabcabbb是否仅包含a字符:"+StringUtils.containsOnly(str1, "a"));
System.out.println("aabcabbb是否没有a字符:"+StringUtils.containsNone(str1, "a"));
System.out.println("aabcabbb是否存在a字符:"+StringUtils.containsAny(str1, "a"));
输出结果:
aabcabbb是否仅包含a字符:false
aabcabbb是否没有a字符:false
aabcabbb是否存在a字符:true
区别:
- containsOnly的意思是判断是不是只有指定的字符;
- containsNone的意思是判断没有指定的字符,如果没有指定字符的话为true,反之为false;
- containsAny的意思是判断是否存在指定的字符;
substring/left/right/mid【指定索引/长度提取字符】
String str1 = "abcdefg";
System.out.println("从下标1开始提取字符:"+StringUtils.substring(str1, 1));
System.out.println("从左到右提取长度为1的字符:"+StringUtils.left(str1, 1));
System.out.println("从右到左提取长度1的字符:"+StringUtils.right(str1, 1));
System.out.println("提取指定下标到指定长度的字符:"+StringUtils.mid(str1, 1, 3));
输出结果:
从下标1开始提取字符:bcdefg
从左到右提取长度为1的字符:a
从右到左提取长度1的字符:g
提取指定下标到指定长度的字符:bcd
区别:
- substring是从指定的下标位置开始提取字符;
- left是从左边开始提取指定长度的字符;
- right是从右边开始提取指定长度的字符;
- mid是提取指定下标到指定长度的字符,例子中我指定了从下标1开始提取到长度为3的字符,例子中提取出来的是bcd;
substringBefore/substringAfter/substringBetween【提取指定字符前/后/中的字符】
String str1 = "abcdefg";
System.out.println("提取字符d之前的字符(不包含d):"+StringUtils.substringBefore(str1, "d"));
System.out.println("提取字符d之后的字符(不包含d):"+StringUtils.substringAfter(str1, "d"));
System.out.println("提取a到d之间的字符:"+StringUtils.substringBetween(str1, "a","d"));
输出结果:
提取字符d之前的字符(不包含d):abc
提取字符d之后的字符(不包含d):efg
提取a到d之间的字符:bc
区别:
- substringBefore提取指定字符前的字符串,不包含指定的字符;
- substringAfter提取指定字符后的字符串,不包含指定的字符;
- substringBetween提取指定两个字符之间的字符,不包含指定的字符;
split/join【将字符串拆分为字符串数组,反之拼接】
List<String> str1 = Arrays.asList("a", "b", "c");
String join = StringUtils.join(str1, "/");
System.out.println("使用join指定斜杠拼接后的字符串:"+ join);
String[] split = StringUtils.split(join, "/");
System.out.println("使用split指定斜杠拆分后的字符串数组:"+ Arrays.toString(split));
输出结果:
使用join指定斜杠拼接后的字符串:a/b/c
使用split指定斜杠拆分后的字符串数组:[a, b, c]
区别:
- join可以把数组或者是集合用指定的字符去进行拼接,这个方法在项目中很常用;
- split可以把字符串以指定字符去进行拆分,返回的结果是一个字符串数组;
remove/deleteWhitespace【字符串的删除操作】
String str1 = "abc";
System.out.println("删除字符串中的b字符:"+StringUtils.remove(str1, "b"));
System.out.println("除了b字符以外的都删除:"+StringUtils.deleteWhitespace("b"));
输出结果:
删除字符串中的b字符:ac
除了b字符以外的都删除:b
replace/overlay【搜索字符串,然后用另一个字符串替换】
String str1 = "aabc";
System.out.println("把b字符替换成中文二字:"+StringUtils.replace(str1, "b","中文"));
System.out.println("从下标0开始到下标1(不包含下标1),覆盖成b字符:"+StringUtils.overlay(str1,"b",0,1));
输出结果:
把b字符替换成中文二字:aa中文c
从下标0开始到下标1(不包含下标1),覆盖成b字符:babc
chop【删除字符串的最后一部分】
String str1 = "aabc";
System.out.println("删除最后一个字符:"+StringUtils.chop(str1));
输出结果:
删除最后一个字符:aab
appendIfMissing【如果不存在后缀,则在字符串的末尾附加一个后缀】
String str1 = "aabc";
System.out.println("添加jpg后缀:"+StringUtils.appendIfMissing(str1,".jpg"));
输出结果:
添加jpg后缀:aabc.jpg
注意:当末尾不存在指定后缀才会进行添加,可以指定多个!
prependIfMissing【如果不存在前缀,则在字符串的开头添加前缀】
String str1 = "aabc";
System.out.println("添加前缀:"+StringUtils.prependIfMissing(str1,"http://"));
输出结果:
添加前缀:http://aabc
注意:当开头不存在指定后缀才会进行添加,可以指定多个!
leftPad/rightPad/center/repeat【填充字符串】
String str1 = "aabc";
System.out.println("超过字符串长度的使用空格在开头填充:"+StringUtils.leftPad(str1,6)+"测试末尾有没有空格");
System.out.println("超过字符串长度的使用空格在末尾填充:"+StringUtils.rightPad(str1,6)+"测试末尾有没有空格");
System.out.println("超过字符串长度的使用空格在两侧填充:"+StringUtils.center(str1,6)+"测试末尾有没有空格");
System.out.println("aabc被指定填充两次:"+StringUtils.repeat(str1,2)+"测试末尾有没有空格");
输出结果:
超过字符串长度的使用空格在开头填充: aabc测试末尾有没有空格
超过字符串长度的使用空格在末尾填充:aabc 测试末尾有没有空格
超过字符串长度的使用空格在两侧填充: aabc 测试末尾有没有空格
aabc被指定填充两次:aabcaabc测试末尾有没有空格
区别:
- leftPad是在左侧使用空格填充,注意看例子中aabc的长度为4,但是我指定长度为6,多出来两个长度使用空格进行了填充;
- rightPad在右侧进行的空格填充;
- center在两侧进行的填充,保证字符在中间;
- 在例子中的repeat无非就是复制了两次aabc,如果指定3次,那么就复制三次
upperCase/lowerCase/swapCase/capitalize/uncapitalize【更改字符串的大小写】
String str1 = "aabCc";
System.out.println("将字符串都转换成大写:"+StringUtils.upperCase(str1));
System.out.println("将字符串都转换成小写:"+StringUtils.lowerCase(str1));
System.out.println("大写的都转成小写,反之小写转大写:"+StringUtils.swapCase(str1));
System.out.println("首字母转大写:"+StringUtils.capitalize(str1));
System.out.println("首字母转小写:"+StringUtils.uncapitalize(str1));
输出结果:
将字符串都转换成大写:AABCC
将字符串都转换成小写:aabcc
大写的都转成小写,反之小写转大写:AABcC
首字母转大写:AabCc
首字母转小写:aabCc
countMatches【计算指定字符在另一个字符串中出现的次数】
String str1 = "aabCc";
System.out.println("出现a的次数:"+StringUtils.countMatches(str1,"a"));
输出结果:
出现a的次数:2
isAlpha/isNumeric/isWhitespace/isAsciiPrintable【检查字符串中的字符】
String str1 = "!aabCc123";
System.out.println("字符串是否都是字母:"+StringUtils.isAlpha(str1));
System.out.println("字符串是否都是数字:"+StringUtils.isNumeric(str1));
System.out.println("字符串是否是空格:"+StringUtils.isWhitespace(str1));
System.out.println("字符串是否是Ascii:"+StringUtils.isAsciiPrintable(str1));
输出结果:
字符串是否都是字母:false
字符串是否都是数字:false
字符串是否是空格:false
字符串是否是Ascii:true
defaultString【防止输入字符串为空】
String str1 = null;
System.out.println("为null则设置指定的默认值:"+StringUtils.defaultString(str1,"a"));
输出结果:
为null则设置指定的默认值:a
rotate【旋转(循环移位)字符串】
String str1 = "abc";
System.out.println("原值:"+str1);
System.out.println("取末尾的两个字符进行旋转换位:"+StringUtils.rotate(str1,2));
输出结果:
原值:abc
取末尾的两个字符进行旋转换位:bca
reverse/reverseDelimited【反转字符串】
String str = "abcdefg";
System.out.println("原值:" + str);
System.out.println("反转后的值:" + StringUtils.reverse(str));
System.out.println("根据指定字符反转:" + StringUtils.reverseDelimited(str, 'c'));
输出结果:
原值:abcdefg
反转后的值:gfedcba
根据指定字符反转:defgcab
abbreviate【字符串多余的省略号显示】
String str = "abcdefg";
System.out.println("原值:" + str);
System.out.println("缩写省略后面的值:" + StringUtils.abbreviate(str, 4));
输出结果:
原值:abcdefg
缩写省略后面的值:a…
注意:缩写指定长度必须是大于等于4!!!
difference【比较字符串差异】
String str1 = "abcd";
String str2 = "atcd";
System.out.println("差异值:" + StringUtils.difference(str1, str2));
输出结果:
差异值:tcd
注意:这个比较差异跟我们所认为的不一样,起初我以为它是将两个字符串从第一个字符开始比较,然后将不一致的字符输出出来,但是使用后发现不是这样,它的确是从第一个字符开始比较,但是当遇到不一样的字符时,它就直接将后面的字符串直接输出了!!!
🥇原创不易,还希望各位大佬支持一下!
👍点赞,你的认可是我创作的动力 !
🌟收藏,你的青睐是我努力的方向!
✏️评论,你的意见是我进步的财富!