StringUtils是工作中使用最頻繁的一個工具類,提供了大量豐富的字符串操作方法,下面是所有方法的一個藍圖:
1)StringUtils.isEmpty(String str)
2)StringUtils.isNotEmpty(String str)
3)StringUtils.isBlank(String str)
4)StringUtils.isNotBlank(String str)
5)StringUtils.isAnyBlank(CharSequence... CSS)
6)StringUtils.isAnyEmpty(CharSequence... css)
7)StringUtils.isNoneBlank(CharSequence... css)
8)StringUtils.isNoneEmpty(CharSequence... css)
9)StringUtils.isWhitespace(CharSequence cs)
isNotEmpty = !isEmpty, isBlank同理;容易忽略的;
StringUtils.isEmpty("") = trueisBlank和isEmpty區別:
System.out.PRintln(StringUtils.isBlank(" "));//true System.out.println(StringUtils.isBlank(" "));//true System.out.println(StringUtils.isBlank("/n/t"));//true //區別 StringUtils.isEmpty(" ") = falseisAnyBlank和isAnyEmpty是多維判空,存在一個blank或者empty既true
StringUtils.isAnyBlank("", "bar","foo"); = true //注意這兩個區別 StringUtils.isAnyEmpty(" ", "bar") = false StringUtils.isAnyEmpty(" ", "bar") = trueisNoneBlank = !isAnyBlank;isNoneEmpty同理
public static boolean isNoneBlank(CharSequence... css) { return !isAnyBlank(css); }isWhitespace判斷空白
StringUtils.isWhitespace(null) = false StringUtils.isWhitespace("") = true StringUtils.isWhitespace(" ") = trueStringUtils.capitalize(String str)
StringUtils.uncapitalize(String str)
StringUtils.upperCase(String str)
StringUtils.upperCase(String str,Locale locale)
StringUtils.lowerCase(String str)
StringUtils.lowerCase(String str,Locale locale)
StringUtils.swapCase(String str)
StringUtils.isAllUpperCase(CharSequence cs)
StringUtils.isAllLowerCase(CharSequence cs)
注意點:
capitalize首字母大寫,upperCase全部轉化為大寫,swapCase大小寫互轉;
StringUtils.capitalize(null) = null StringUtils.capitalize("") = "" //首字母轉為大寫 StringUtils.capitalize("cat") = "Cat" //全部轉為大寫 StringUtils.upperCase("aBc") = "ABC" //大小寫互轉 StringUtils.swapCase("The dog has a BONE") = "tHE DOG HAS A bone"isAllUpperCase是否全部大寫,isAllLowerCase是否全部小寫
StringUtils.isAllLowerCase(" ") = false StringUtils.isAllLowerCase("abc") = true StringUtils.isAllLowerCase("abC") = false StringUtils.isAllLowerCase("ab c") = false StringUtils.isAllLowerCase("ab1c") = false StringUtils.isAllLowerCase("ab/c") = falseStringUtils.remove(String str, char remove)
StringUtils.remove(String str, String remove)
StringUtils.removeEnd(String str, String remove)
StringUtils.removeEndIgnoreCase(String str, String remove)
StringUtils.removePattern(String source, String regex)
StringUtils.removeStart(String str, String remove)
StringUtils.removeStartIgnoreCase(String str, String remove)
StringUtils.deleteWhitespace(String str)
具體例子
//刪除字符 StringUtils.remove("queued", 'u') = "qeed" //刪除字符串 StringUtils.remove("queued", "ue") = "qd" //刪除結尾匹配的字符串 StringUtils.removeEnd("www.domain.com", ".com") = "www.domain" //刪除結尾匹配的字符串,找都不到返回原字符串 StringUtils.removeEnd("www.domain.com", "domain") = "www.domain.com" //忽略大小寫的 StringUtils.removeEndIgnoreCase("www.domain.com", ".COM") = "www.domain") //刪除所有空白(好用) StringUtils.deleteWhitespace("abc") = "abc" StringUtils.deleteWhitespace(" ab c ") = "abc"replace(String text, String searchString, String replacement)
replace(String text, String searchString, String replacement, int max)
replaceChars(String str, char searchChar, char replaceChar)
replaceChars(String str, String searchChars, String replaceChars)
replaceEach(String text, String[] searchList, String[] replacementList)
replaceEachRepeatedly(String text, String[] searchList, String[] replacementList)
replaceOnce(String text, String searchString, String replacement)
replacePattern(String source, String regex, String replacement)
overlay(String str,String overlay,int start,int end)
例子
StringUtils.replace("aba", "a", "") = "b" StringUtils.replace("aba", "a", "z") = "zbz" //數字就是替換個數,0代表不替換,1代表從開始數起第一個,-1代表全部替換 StringUtils.replace("abaa", "a", "", -1) = "b" StringUtils.replace("abaa", "a", "z", 0) = "abaa" StringUtils.replace("abaa", "a", "z", 1) = "zbaa" StringUtils.replace("abaa", "a", "z", 2) = "zbza" StringUtils.replace("abaa", "a", "z", -1) = "zbzz"replaceEach是replace的增強版,搜索列表和替換長度必須一致,否則報IllegalArgumentException異常:
StringUtils.replaceEach("abcde", new String[]{"ab", "d"}, new String[]{"w", "t"}) = "wcte" StringUtils.replaceEach("abcde", new String[]{"ab", "d"}, new String[]{"d", "t"}) = "dcte" StringUtils.replaceChars("dabcba", "bcd", "yzx") = "xayzya" StringUtils.replaceChars("abcba", "bc", "y") = "ayya"replaceOnce只替換一次:
StringUtils.replaceOnce("aba", "a", "") = "ba" StringUtils.replaceOnce("aba", "a", "z") = "zba" StringUtils.replaceEachRepeatedly("abcde", new String[]{"ab", "d"}, new String[]{"w", "t"}) = "wcte" //這是一個非常奇怪的函數,本來自己料想結果應該是“dcte”的,可是結果居然是tcte,而dcte再替換一次就是tcte了。 StringUtils.replaceEachRepeatedly("abcde", new String[]{"ab", "d"}, new String[]{"d", "t"}) = "tcte" StringUtils.overlay("abcdef", "zzzz", 2, 4) = "abzzzzef" StringUtils.overlay("abcdef", "zzzz", 4, 2) = "abzzzzef" StringUtils.overlay("abcdef", "zzzz", -1, 4) = "zzzzef" StringUtils.overlay("abcdef", "zzzz", 2, 8) = "abzzzz" StringUtils.overlay("abcdef", "zzzz", -2, -3) = "zzzzabcdef" StringUtils.overlay("abcdef", "zzzz", 8, 10) = "abcdefzzzz"reverse(String str)
reverseDelimited(String str, char separatorChar)
例:
StringUtils.reverse("bat") = "tab" StringUtils.reverseDelimited("a.b.c", 'x') = "a.b.c" StringUtils.reverseDelimited("a.b.c", ".") = "c.b.a"split(String str)
split(String str, char separatorChar)
split(String str, String separatorChars)
split(String str, String separatorChars, int max)
splitByCharacterType(String str)
splitByCharacterTypeCamelCase(String str)
splitByWholeSeparator(String str, String separator)
splitByWholeSeparator(String str, String separator, int max)
splitByWholeSeparatorPreserveAllTokens(String str, String separator)
splitByWholeSeparatorPreserveAllTokens(String str, String separator, int max)
splitPreserveAllTokens(String str)
splitPreserveAllTokens(String str, char separatorChar)
splitPreserveAllTokens(String str, String separatorChars)
splitPreserveAllTokens(String str, String separatorChars, int max)
例:
//用空白符做空格 StringUtils.split("abc def") = ["abc", "def"] StringUtils.split("abc def") = ["abc", "def"] StringUtils.split("a..b.c", '.') = ["a", "b", "c"] //用字符分割 StringUtils.split("a:b:c", '.') = ["a:b:c"] //0 或者負數代表沒有限制 StringUtils.split("ab:cd:ef", ":", 0) = ["ab", "cd", "ef"] //分割字符串 ,可以設定得到數組的長度,限定為2 StringUtils.split("ab:cd:ef", ":", 2) = ["ab", "cd:ef"] //null也可以作為分隔 StringUtils.splitByWholeSeparator("ab de fg", null) = ["ab", "de", "fg"] StringUtils.splitByWholeSeparator("ab de fg", null) = ["ab", "de", "fg"] StringUtils.splitByWholeSeparator("ab:cd:ef", ":") = ["ab", "cd", "ef"] StringUtils.splitByWholeSeparator("ab-!-cd-!-ef", "-!-") = ["ab", "cd", "ef"] //帶有限定長度的分隔 StringUtils.splitByWholeSeparator("ab:cd:ef", ":", 2) = ["ab", "cd:ef"]join(byte[] array,char separator)
join(Object[] array,char separator)等方法
join(Object[] array,char separator,int startIndex,int endIndex)
例:
//只有一個參數的join,簡單合并在一起 StringUtils.join(["a", "b", "c"]) = "abc" StringUtils.join([null, "", "a"]) = "a" //null的話,就是把字符合并在一起 StringUtils.join(["a", "b", "c"], null) = "abc" //從index為0到3合并,注意是排除3的 StringUtils.join([null, "", "a"], ',', 0, 3) = ",,a" StringUtils.join(["a", "b", "c"], "--", 0, 3) = "a--b--c" //從index為1到3合并,注意是排除3的 StringUtils.join(["a", "b", "c"], "--", 1, 3) = "b--c" StringUtils.join(["a", "b", "c"], "--", 2, 3) = "c"substring(String str,int start)
substringAfter(String str,String separator)
substringBeforeLast(String str,String separator)
substringAfterLast(String str,String separator)
substringBetween(String str,String tag)
StringUtils.substring("abcdefg", 0) = "abcdefg" StringUtils.substring("abcdefg", 2) = "cdefg" StringUtils.substring("abcdefg", 4) = "efg" //start>0表示從左向右, start<0表示從右向左, start=0則從左第一位開始 StringUtils.substring("abcdefg", -2) = "fg" StringUtils.substring("abcdefg", -4) = "defg" //從第二個參數字符串開始截取,排除第二個字符串 StringUtils.substringAfter("abc", "a") = "bc" StringUtils.substringAfter("abcba", "b") = "cba" StringUtils.substringAfter("abc", "c") = "" //從最后一個字母出現開始截取 StringUtils.substringBeforeLast("abcba", "b") = "abc" StringUtils.substringBeforeLast("abc", "c") = "ab" StringUtils.substringBeforeLast("a", "a") = "" StringUtils.substringBeforeLast("a", "z") = "a" StringUtils.substringAfterLast("abc", "a") = "bc" StringUtils.substringAfterLast("abcba", "b") = "a" StringUtils.substringAfterLast("abc", "c") = "" StringUtils.substringBetween("tagabctag", null) = null StringUtils.substringBetween("tagabctag", "") = "" StringUtils.substringBetween("tagabctag", "tag") = "abc"截取分析圖:
一個字符串可以通過增加一個字符,刪除一個字符,替換一個字符得到另外一個字符串,假設,我們把從字符串A轉換成字符串B,前面3種操作所執行的最少次數稱為AB相似度.
getLevenshteinDistance(CharSequence s, CharSequence t)getLevenshteinDistance(CharSequence s, CharSequence t, int threshold)StringUtils.getLevenshteinDistance("elephant", "hippo") = 7StringUtils.getLevenshteinDistance("hippo", "elephant") = 7
例://b替換為dabc adc 度為 1//ababababa去掉a,末尾加bababababa babababab 度為 2abcd acdb 度為2
difference(String str1,String str2)
//在str1中尋找str2中沒有的的字符串,并返回 StringUtils.difference("", "abc") = "abc" StringUtils.difference("abc", "") = "" StringUtils.difference("abc", "abc") = "" StringUtils.difference("abc", "ab") = "" StringUtils.difference("ab", "abxyz") = "xyz" StringUtils.difference("abcde", "abxyz") = "xyz" StringUtils.difference("abcde", "xyz") = "xyz"圖片理解:
abbreviate(String str, int maxWidth)
abbreviate(String str, int offset, int maxWidth)
abbreviateMiddle(String str, String middle, int length)
注意:
字符串的長度小于或等于最大長度,返回該字符串。運算規律(substring(str, 0, max-3) + "...")如果最大長度小于4,則拋出異常。
//(substring(str, 0, 6-3) + "...") StringUtils.abbreviate("abcdefg", 6) = "abc..." StringUtils.abbreviate("abcdefg", 7) = "abcdefg" StringUtils.abbreviate("abcdefg", 8) = "abcdefg" StringUtils.abbreviate("abcdefg", 4) = "a..." StringUtils.abbreviate("abcdefg", 3) = IllegalArgumentExceptioncountMatches(CharSequence str,char ch)
StringUtils.countMatches("abba", 0) = 0 StringUtils.countMatches("abba", 'a') = 2 StringUtils.countMatches("abba", 'b') = 2 StringUtils.countMatches("abba", 'x') = 0trim(String str)
trimToEmpty(String str)
trimToNull(String str)
deleteWhitespace(String str)
StringUtils.trim(" ") = "" StringUtils.trim("abc") = "abc" StringUtils.trim(" abc ") = "abc" //空的話,返回null StringUtils.trimToNull(" ") = null StringUtils.trimToNull("abc") = "abc" StringUtils.trimToNull(" abc ") = "abc" StringUtils.trimToEmpty(" ") = "" StringUtils.trimToEmpty("abc") = "abc" StringUtils.trimToEmpty(" abc ") = "abc"-注意這兩者的區別。
StringUtils.deleteWhitespace("") = "" StringUtils.deleteWhitespace("abc") = "abc" StringUtils.deleteWhitespace(" ab c ") = "abc"equals(CharSequence cs1,CharSequence cs2)
equalsIgnoreCase(CharSequence str1, CharSequence str2)
StringUtils.equals("abc", null) = false StringUtils.equals("abc", "abc") = true StringUtils.equals("abc", "ABC") = false //忽略大小寫 StringUtils.equalsIgnoreCase("abc", null) = false StringUtils.equalsIgnoreCase("abc", "abc") = true StringUtils.equalsIgnoreCase("abc", "ABC") = truedefaultString(String str)
defaultString(String str,String defaultStr)
StringUtils.defaultString("") = "" StringUtils.defaultString("bat") = "bat" StringUtils.defaultString("", "NULL") = "" //如果第一個參數為空,這返回第二個默認參數 StringUtils.defaultString("bat", "NULL") = "bat"leftPad/rightPad(String str,int size)
leftPad(String str,int size,char padChar)
center(String str,int size)
center(String str,int size,char padChar)
repeat(char ch,int repeat)
repeat(String str,String separator,int repeat)
appendIfMissing(String str, CharSequence suffix, CharSequence... suffixes)
appendIfMissing(String str,CharSequence suffix,CharSequence... suffixes)
StringUtils.leftPad("bat", 3) = "bat" //左填充,默認填充空 StringUtils.leftPad("bat", 5) = " bat" StringUtils.leftPad("bat", 1) = "bat" StringUtils.leftPad("bat", -1) = "bat" //左填充,填充字符為z StringUtils.leftPad("bat", 3, 'z') = "bat" StringUtils.leftPad("bat", 5, 'z') = "zzbat" StringUtils.leftPad("bat", 1, 'z') = "bat" StringUtils.leftPad("bat", -1, 'z') = "bat" //居中 StringUtils.center("ab", -1) = "ab" StringUtils.center("ab", 4) = " ab " StringUtils.center("abcd", 2) = "abcd" StringUtils.center("a", 4) = " a //居中,最后一個參數是填充字符或字符串 StringUtils.center("abcd", 2, ' ') = "abcd" StringUtils.center("a", 4, ' ') = " a " StringUtils.center("a", 4, 'y') = "yayy" //重復字符串,第二個參數是重復次數 StringUtils.repeat("a", 3) = "aaa" StringUtils.repeat("ab", 2) = "abab" StringUtils.repeat("a", -2) = "" //重復字符串,第二個參數是分割符,第三個參數是重復次數 StringUtils.repeat("", "x", 3) = "xxx" StringUtils.repeat("?", ", ", 3) = "?, ?, ?" // StringUtils.appendIfMissing("abcxyz", "xyz", "mno") = "abcxyz" StringUtils.appendIfMissing("abcmno", "xyz", "mno") = "abcmno" StringUtils.appendIfMissing("abcXYZ", "xyz", "mno") = "abcXYZxyz" StringUtils.appendIfMissing("abcMNO", "xyz", "mno") = "abcMNOxyz"containsOnly(CharSequence cs,char... valid)
containsNone(CharSequence cs,char... searchChars)
startsWith(CharSequence str,CharSequence prefix)
startsWithIgnoreCase(CharSequence str,CharSequence prefix)
startsWithAny(CharSequence string,CharSequence... searchStrings)
例子
//判斷字符串中所有字符,是否都是出自參數2中 StringUtils.containsOnly("ab", "") = false StringUtils.containsOnly("abab", "abc") = true StringUtils.containsOnly("ab1", "abc") = false StringUtils.containsOnly("abz", "abc") = false //判斷字符串中所有字符,都不在參數2中。 StringUtils.containsNone("abab", 'xyz') = true StringUtils.containsNone("ab1", 'xyz') = true StringUtils.containsNone("abz", 'xyz') = false //判斷字符串是否以第二個參數開始 StringUtils.startsWith("abcdef", "abc") = true StringUtils.startsWith("ABCDEF", "abc") = falseindexOf(CharSequence seq,CharSequence searchSeq)
indexOf(CharSequence seq,CharSequence searchSeq,int startPos)
indexOfIgnoreCase/lastIndexOfIgnoreCase(CharSequence str,CharSequence searchStr)
lastIndexOf(CharSequence seq,int searchChar)
//返回第二個參數開始出現的索引值 StringUtils.indexOf("aabaabaa", "a") = 0 StringUtils.indexOf("aabaabaa", "b") = 2 StringUtils.indexOf("aabaabaa", "ab") = 1 //從第三個參數索引開始找起,返回第二個參數開始出現的索引值 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.lastIndexOf("aabaabaa", 'a') = 7 StringUtils.lastIndexOf("aabaabaa", 'b') = 5 StringUtils.lastIndexOfIgnoreCase("aabaabaa", "A", 8) = 7 StringUtils.lastIndexOfIgnoreCase("aabaabaa", "B", 8) = 5 StringUtils.lastIndexOfIgnoreCase("aabaabaa", "AB", 8) = 4 StringUtils.lastIndexOfIgnoreCase("aabaabaa", "B", 9) = 5新聞熱點
疑難解答