三十九、Java基础之StringUtils常用方法
一、StringUtils常用的静态方法
1. public static boolean isEmpty(String str)
判断某字符串是否为空,为空的标准是 str==null 或 str.length()==0
下面是示例:
StringUtils.isEmpty(null) = true StringUtils.isEmpty("") = true StringUtils.isEmpty(" ") = false //注意在 StringUtils 中空格作非空处理 StringUtils.isEmpty(" ") = false StringUtils.isEmpty("bob") = false StringUtils.isEmpty(" bob ") = false
2. public static boolean isNotEmpty(String str)
判断某字符串是否非空,等于 !isEmpty(String str)
下面是示例:
StringUtils.isNotEmpty(null) = false StringUtils.isNotEmpty("") = false StringUtils.isNotEmpty(" ") = true StringUtils.isNotEmpty(" ") = true StringUtils.isNotEmpty("bob") = true StringUtils.isNotEmpty(" bob ") = true
3. public static boolean isBlank(String str)
判断某字符串是否为空或长度为0或由空白符(whitespace) 构成
下面是示例:
StringUtils.isBlank(null) = true StringUtils.isBlank("") = true StringUtils.isBlank(" ") = true StringUtils.isBlank(" ") = true StringUtils.isBlank("\t \n \f \r") = true //对于制表符、换行符、换页符和回车符 StringUtils.isBlank() //均识为空白符 StringUtils.isBlank("\b") = false //"\b"为单词边界符 StringUtils.isBlank("bob") = false StringUtils.isBlank(" bob ") = false
4. public static boolean isNotBlank(String str)
判断某字符串是否不为空且长度不为0且不由空白符(whitespace) 构成,等于 !isBlank(String str)
下面是示例:
StringUtils.isNotBlank(null) = false StringUtils.isNotBlank("") = false StringUtils.isNotBlank(" ") = false StringUtils.isNotBlank(" ") = false StringUtils.isNotBlank("\t \n \f \r") = false StringUtils.isNotBlank("\b") = true StringUtils.isNotBlank("bob") = true StringUtils.isNotBlank(" bob ") = true
5. public static String trim(String str)
去掉字符串两端的控制符(control characters, char <= 32) , 如果输入为 null 则返回null
下面是示例:
StringUtils.trim(null) = null StringUtils.trim("") = "" StringUtils.trim(" ") = "" StringUtils.trim(" \b \t \n \f \r ") = "" StringUtils.trim(" \n\tss \b") = "ss" StringUtils.trim(" d d dd ") = "d d dd" StringUtils.trim("dd ") = "dd" StringUtils.trim(" dd ") = "dd"
6. public static String trimToNull(String str)
去掉字符串两端的控制符(control characters, char <= 32) ,如果变为 null 或"",则返回 null
下面是示例:
StringUtils.trimToNull(null) = null StringUtils.trimToNull("") = null StringUtils.trimToNull(" ") = null StringUtils.trimToNull(" \b \t \n \f \r ") = null StringUtils.trimToNull(" \n\kk \b") = "kk" StringUtils.trimToNull(" d d dd ") = "d d dd" StringUtils.trimToNull("dd ") = "dd" StringUtils.trimToNull(" dd ") = "dd"
7. public static String trimToEmpty(String str)
去掉字符串两端的控制符(control characters, char <= 32) ,如果变为 null 或 "" ,则返回 ""
下面是示例:
StringUtils.trimToEmpty(null) = "" StringUtils.trimToEmpty("") = "" StringUtils.trimToEmpty(" ") = "" StringUtils.trimToEmpty(" \b \t \n \f \r ") = "" StringUtils.trimToEmpty(" \n\tss \b") = "ss" StringUtils.trimToEmpty(" d d dd ") = "d d dd" StringUtils.trimToEmpty("dd ") = "dd" StringUtils.trimToEmpty(" dd ") = "dd"
8. public static String strip(String str)
去掉字符串两端的空白符(whitespace) ,如果输入为 null 则返回 null
下面是示例(注意和 trim() 的区别):
StringUtils.strip(null) = null StringUtils.strip("") = "" StringUtils.strip(" ") = "" StringUtils.strip(" \b \t \n \f \r ") = "\b" StringUtils.strip(" \n\tss \b") = "ss \b" StringUtils.strip(" d d dd ") = "d d dd" StringUtils.strip("dd ") = "dd" StringUtils.strip(" dd ") = "dd"
9. public static String stripToNull(String str)
去掉字符串两端的空白符(whitespace) ,如果变为 null 或"",则返回 null
下面是示例(注意和 trimToNull() 的区别):
StringUtils.stripToNull(null) = null StringUtils.stripToNull("") = null StringUtils.stripToNull(" ") = null StringUtils.stripToNull(" \b \t \n \f \r ") = "\b" StringUtils.stripToNull(" \n\tss \b") = "ss \b" StringUtils.stripToNull(" d d dd ") = "d d dd" StringUtils.stripToNull("dd ") = "dd" StringUtils.stripToNull(" dd ") = "dd"
10. public static String stripToEmpty(String str)
去掉字符串两端的空白符(whitespace) ,如果变为 null 或"" ,则返回""
下面是示例(注意和 trimToEmpty() 的区别):
StringUtils.stripToNull(null) = "" StringUtils.stripToNull("") = "" StringUtils.stripToNull(" ") = "" StringUtils.stripToNull(" \b \t \n \f \r ") = "\b" StringUtils.stripToNull(" \n\tss \b") = "ss \b" StringUtils.stripToNull(" d d dd ") = "d d dd" StringUtils.stripToNull("dd ") = "dd" StringUtils.stripToNull(" dd ") = "dd"
11. public static String strip(String str, String stripChars)
去掉 str 两端的在 stripChars 中的字符。
如果 str 为 null 或等于"" ,则返回它本身;
如果 stripChars 为 null 或"" ,则返回 strip(String str) 。
12. public static String stripStart(String str, String stripChars)
和11相似,去掉 str 前端的在 stripChars 中的字符。
13. public static String stripEnd(String str, String stripChars)
和11相似,去掉 str 末端的在 stripChars 中的字符。
14. public static String[] stripAll(String[] strs)
对字符串数组中的每个字符串进行 strip(String str) ,然后返回。
如果 strs 为 null 或 strs 长度为0,则返回 strs 本身
15. public static String[] stripAll(String[] strs, String stripChars)
对字符串数组中的每个字符串进行 strip(String str, String stripChars) ,然后返回。
如果 strs 为 null 或 strs 长度为0,则返回 strs 本身
16. public static boolean equals(String str1, String str2)
比较两个字符串是否相等,如果两个均为空则也认为相等。
17. public static boolean equalsIgnoreCase(String str1, String str2)
比较两个字符串是否相等,不区分大小写,如果两个均为空则也认为相等。
18. public static int indexOf(String str, char searchChar)
返回字符 searchChar 在字符串 str 中第一次出现的位置。
如果 searchChar 没有在 str 中出现则返回-1,
如果 str 为 null 或 "" ,则也返回-1
19. public static int indexOf(String str, char searchChar, int startPos)
返回字符 searchChar 从 startPos 开始在字符串 str 中第一次出现的位置。
如果从 startPos 开始 searchChar 没有在 str 中出现则返回-1,
如果 str 为 null 或 "" ,则也返回-1
20. public static int indexOf(String str, String searchStr)
返回字符串 searchStr 在字符串 str 中第一次出现的位置。
如果 str 为 null 或 searchStr 为 null 则返回-1,
如果 searchStr 为 "" ,且 str 为不为 null ,则返回0,
如果 searchStr 不在 str 中,则返回-1
21. public static int ordinalIndexOf(String str, String searchStr, int ordinal)
返回字符串 searchStr 在字符串 str 中第 ordinal 次出现的位置。
如果 str=null 或 searchStr=null 或 ordinal<=0 则返回-1
举例(*代表任意字符串):
StringUtils.ordinalIndexOf(null, *, *) = -1 StringUtils.ordinalIndexOf(*, null, *) = -1 StringUtils.ordinalIndexOf("", "", *) = 0 StringUtils.ordinalIndexOf("aabaabaa", "a", 1) = 0 StringUtils.ordinalIndexOf("aabaabaa", "a", 2) = 1 StringUtils.ordinalIndexOf("aabaabaa", "b", 1) = 2 StringUtils.ordinalIndexOf("aabaabaa", "b", 2) = 5 StringUtils.ordinalIndexOf("aabaabaa", "ab", 1) = 1 StringUtils.ordinalIndexOf("aabaabaa", "ab", 2) = 4 StringUtils.ordinalIndexOf("aabaabaa", "bc", 1) = -1 StringUtils.ordinalIndexOf("aabaabaa", "", 1) = 0 StringUtils.ordinalIndexOf("aabaabaa", "", 2) = 0
22. public static int indexOf(String str, String searchStr, int startPos)
返回字符串 searchStr 从 startPos 开始在字符串 str 中第一次出现的位置。
举例(*代表任意字符串):
StringUtils.indexOf(null, *, *) = -1 StringUtils.indexOf(*, null, *) = -1 StringUtils.indexOf("", "", 0) = 0 StringUtils.indexOf("aabaabaa", "a", 0) = 0 StringUtils.indexOf("aabaabaa", "b", 0) = 2 StringUtils.indexOf("aabaabaa", "ab", 0) = 1 StringUtils.indexOf("aabaabaa", "b", 3) = 5 StringUtils.indexOf("aabaabaa", "b", 9) = -1 StringUtils.indexOf("aabaabaa", "b", -1) = 2 StringUtils.indexOf("aabaabaa", "", 2) = 2 StringUtils.indexOf("abc", "", 9) = 3
23. public static String[] split(String str,String separatorChars)
字符串分割 StringUtils.split(null, *) = null StringUtils.split("", *) = [] StringUtils.split("abc def", null) = ["abc", "def"] StringUtils.split("abc def", " ") = ["abc", "def"] StringUtils.split("abc def", " ") = ["abc", "def"] StringUtils.split("ab:cd:ef", ":") = ["ab", "cd", "ef"]
24. public static <T> String join(T... elements)
字符串连接 StringUtils.join(null) = null StringUtils.join([]) = "" StringUtils.join([null]) = "" StringUtils.join(["a", "b", "c"]) = "abc" StringUtils.join([null, "", "a"]) = "a"
25. public static String join(Object[] array,char separator)
特定字符串连接数组,很多情况下还是蛮实用,不用自己取拼字符串 StringUtils.join(null, *) = null StringUtils.join([], *) = "" StringUtils.join([null], *) = "" StringUtils.join(["a", "b", "c"], ';') = "a;b;c" StringUtils.join(["a", "b", "c"], null) = "abc" StringUtils.join([null, "", "a"], ';') = ";;a"
26. public static String wrap(String str,char wrapWith)包装,用后面的字符串对前面的字符串进行包装
StringUtils.wrap(null, *) = null StringUtils.wrap("", *) = "" StringUtils.wrap("ab", '\0') = "ab" StringUtils.wrap("ab", 'x') = "xabx" StringUtils.wrap("ab", '\'') = "'ab'" StringUtils.wrap("\"ab\"", '\"') = "\"\"ab\"\""
27. public static String abbreviate(String str,int maxWidth)缩略字符串,省略号要占三位。maxWith小于3位会报错。
StringUtils.abbreviate(null, *) = null
StringUtils.abbreviate("", 4) = ""
StringUtils.abbreviate("abcdefg", 6) = "abc..."
StringUtils.abbreviate("abcdefg", 7) = "abcdefg"
StringUtils.abbreviate("abcdefg", 8) = "abcdefg"
StringUtils.abbreviate("abcdefg", 4) = "a..."
StringUtils.abbreviate("abcdefg", 3) = IllegalArgumentException
27.1. public static String abbreviate(String str,int offset,int maxWidth)缩略字符串的一些高级用法
StringUtils.abbreviate(null, *, *) = null
StringUtils.abbreviate("", 0, 4) = ""
StringUtils.abbreviate("abcdefghijklmno", -1, 10) = "abcdefg..."
StringUtils.abbreviate("abcdefghijklmno", 0, 10) = "abcdefg..."
StringUtils.abbreviate("abcdefghijklmno", 1, 10) = "abcdefg..."
StringUtils.abbreviate("abcdefghijklmno", 4, 10) = "abcdefg..."
StringUtils.abbreviate("abcdefghijklmno", 5, 10) = "...fghi..."
StringUtils.abbreviate("abcdefghijklmno", 6, 10) = "...ghij..."
StringUtils.abbreviate("abcdefghijklmno", 8, 10) = "...ijklmno"
StringUtils.abbreviate("abcdefghijklmno", 10, 10) = "...ijklmno"
StringUtils.abbreviate("abcdefghijklmno", 12, 10) = "...ijklmno"
StringUtils.abbreviate("abcdefghij", 0, 3) = IllegalArgumentException
StringUtils.abbreviate("abcdefghij", 5, 6) = IllegalArgumentException
二、StringUtils 转换、移除、替换、反转
1、转换 :
1.1 public static String capitalize(String str) 首字母大写
StringUtils.capitalize(null) = null StringUtils.capitalize("") = "" StringUtils.capitalize("cat") = "Cat" StringUtils.capitalize("cAt") = "CAt"
1.2 public static String swapCase(String str)反向大小写
StringUtils.swapCase(null) = null StringUtils.swapCase("") = "" StringUtils.swapCase("The dog has a BONE") = "tHE DOG HAS A bone"
1.3public static boolean isAlpha(CharSequence cs) 判断字符串是否由字母组成
StringUtils.isAlpha(null) = false StringUtils.isAlpha("") = false StringUtils.isAlpha(" ") = false StringUtils.isAlpha("abc") = true StringUtils.isAlpha("ab2c") = false StringUtils.isAlpha("ab-c") = false
1.4字符串整体大小写转换
StringUtils.upperCase(null)); // null StringUtils.upperCase("china")); // CHINA (全部转为大写) StringUtils.upperCase("china", Locale.ENGLISH)); // CHINA (按照指定规则转换为大写) StringUtils.lowerCase(null)); // null StringUtils.lowerCase("CHINA")); // china (全部转换为小写) StringUtils.lowerCase("CHINA", Locale.ENGLISH)); // china (按照指定转换规则转换为小写)
1.5 判断字符串是否全部是大写或小写(空或空白符均为false)
StringUtils.isAllUpperCase(null)); // false StringUtils.isAllUpperCase("")); // false StringUtils.isAllUpperCase(" ")); // false StringUtils.isAllUpperCase("CHINA")); // true StringUtils.isAllLowerCase(null)); // false StringUtils.isAllLowerCase("")); // false StringUtils.isAllLowerCase(" ")); // false StringUtils.isAllLowerCase("china")); // true
2、移除
从字符串中移除匹配的字符或字符序列,如果要移除的字符或字符序列在字符串中不存在,即无匹配,则不进行移除
1)StringUtils.remove(String str, char remove) 2)StringUtils.remove(String str, String remove) 3)StringUtils.removeStart(String str, String remove) 4)StringUtils.removeStartIgnoreCase(String str, String remove) 5)StringUtils.removeEnd(String str, String remove) 6)StringUtils.removeEndIgnoreCase(String str, String remove) 7)StringUtils.deleteWhitespace(String str) (1)移除单个字符 StringUtils.remove(null, 'a')); // null (注意此处及下一行为null) StringUtils.remove('china', null) // china StringUtils.remove("china", 'i')); // chna StringUtils.remove("china", 'b')); // china (如果要移除的字符不存在,则返回原字符串) (2)移除指定字符序列 StringUtils.remove("china", "in")); // cha StringUtils.remove("china", "nin")); // china (3)移除开头匹配的字符序列 StringUtils.removeStart("china", "ch")); // ina StringUtils.removeStartIgnoreCase("china", "CHI")); // na (忽略大小写) (4)移除结尾匹配的字符序列 StringUtils.removeEnd("china", "na")); // chi StringUtils.removeEndIgnoreCase("china", "NA")); // chi (忽略大小写) (5)移除空白字符 StringUtils.deleteWhitespace(null)); //null StringUtils.deleteWhitespace(" c h i\tn\ra")); // china 3、替换 StringUtils中常用的替换方法有如下几种 1)replace(String text, String searchString, String replacement) 2)replace(String text, String searchString, String replacement, int max) 3)replaceChars(String str, char searchChar, char replaceChar) 4)replaceChars(String str, String searchChars, String replaceChars) 5)replaceOnce(String text, String searchString, String replacement) 6)overlay(String str,String overlay,int start,int end) 7)replaceEach(String text, String[] searchList, String[] replacementList) 8)replaceEachRepeatedly(String text, String[] searchList, String[]replacementList) 需要注意的是,若被替换的字符串为null,或者被替换的字符或字符序列为null,又或者替换的字符或字符序列为null,那么此次替换都会被忽略,返回原字符串
(1)替换单个字符或字符序列
(a)replace方法
replace方法可以替换单个字符序列 StringUtils.replace("china", null, "z")); // china (此处被替换字符序列为null,因此替换会被忽略,返回原字符串) StringUtils.replace("china", "c", null)); // china (此处替换字符序列为null,因此替换也被忽略,返回原字符串) StringUtils.replace("china", "a", "ese")); // chinese StringUtils.replace("china", "a", "")); // chin replace方法还可以指定最大替换的个数 StringUtils.replace("aabaaa", "a", "z", 0)); // aabaaa (0表示替换的个数为0,也就是不替换) StringUtils.replace("aabaaa", "a", "z", 1)); // zabaaa (1表示最多替换1个) StringUtils.replace("aabaaa", "a", "z", 2)); // zzbaaa (2表示最多替换2个) StringUtils.replace("aabaaa", "a", "z", 3)); // zzbzaa (3表示最多替换3个) StringUtils.replace("aabaaa", "a", "z", -1)); // zzbzaa (-1表示全部替换) (b)replaceChars方法 replaceChars方法可以替换单个字符或者单个字符序列 StringUtils.replaceChars("china", 'a', 'z')); // chinz StringUtils.replaceChars("china", "a", "z")); // chinz (c)replaceOnce方法 replaceOnce方法只会替换一次,也就是只会替换第一个要替换的字符序列,后面即使有匹配的字符序列也不会被替换 StringUtils.replaceOnce("abaa", "a", "z")); // zbaa
(d)overlay方法
overlay(String str,String overlay,int start,int end)方法可以在指定位置进行字符序列替换,从start索引处开始(包含)到end-1索引处为止进行替换 StringUtils.overlay("abcdef", "zzzz", 2, 4)); // abzzzzef 这里有一些特殊情况: 1)起始索引start小于结束索引end,这时会将end作为起始索引,start作为结束索引 StringUtils.overlay("abcdef", "zzzz", 4, 2)); // abzzzzef StringUtils.overlay("abcdef", "zzzz", 4, 3)); // abczzzzef StringUtils.overlay("abcdef", "zzzz", 4, 4)); // abcdzzzzef StringUtils.overlay("abcdef", "zzzz", 4, 5)); // abcdzzzzf 2)起始索引start为负数,这时start会被当作0处理 StringUtils.overlay("abcdef", "zzzz", -1, 2)); // abcdzz StringUtils.overlay("abcdef", "zzzz", -2, -3)); // zzzzabcdef 3)结束索引end大于原始字符串的长度,这时end会被当作原始字符串长度处理 StringUtils.overlay("abcdef", "zzzz", 8, 10)); // abcdefzzzz (2)同时替换多个字符序列 (a)replaceEach方法 replaceEach(String text, String[] searchList, String[] replacementList)方法可以同时替换多个字符序列,但被替换和替换的字符序列的个数应该对应,否则会报IllegalArgumentException StringUtils.replaceEach("china", new String[] { "ch", "a" }, new String[] { "x", "z" })); // xhinz (将ch和a分别替换为x和z) StringUtils.replaceEach("china", null, new String[] { "x", "z" })); // china (存在null,不进行替换) StringUtils.replaceEach("china", new String[] { "ch", "a" }, new String[] { "x", "z", "y" })); // IllegalArgumentException (被替换和替换的个数不对应) (b)replaceEachRepeatedly方法 replaceEachRepeatedly(String text, String[] searchList, String[] replacementList)方法可以循环进行替换,具体见下面的例子: StringUtils.replaceEachRepeatedly("china", new String[] { "c", "x" }, new String[] { "x", "z" })); // zhina (c被替换为x,x又被替换为z) 但如果替换是一个死循环,则会报IllegalStateException: StringUtils.replaceEachRepeatedly("china", new String[] { "c", "x" }, new String[] { "x", "c" })); // IllegalStateException (c被替换为x,x又被替换为c)
4、反转
StringUtils中有关反转的方法如下:
1. reverse(String str)
简单反转
public static String reverse(String str)字符串翻转
StringUtils.reverse(null) = null StringUtils.reverse("") = "" StringUtils.reverse("bat") = "tab"
2. reverseDelimited(String str, char separatorChar)
根据指定分隔符进行反转,分隔符之间的字符不进行反转
StringUtils.reverseDelimited("china", ',')); // china StringUtils.reverseDelimited("cxhinxa", 'x')); // axhinxz StringUtils.reverseDelimited("c.hin.a", '.')); // a.hin.c StringUtils.reverseDelimited("c.hina", '.')); // hina.c