一、截取
??StringUtils中常用的截取字符串的方法如下:
substring(String str,int start)
substring(String str,int start, int end)
substringAfter(String str,String separator)
substringAfterLast(String str,String separator)
substringBefore(String str,String separator)
substringBeforeLast(String str,String separator)
substringBetween(String str,String tag)
??需要注意的是,截取字符串時(shí),若被截取的字符串為null或"",則截取之后的返回的字符串也為null和""。
(1)根據(jù)指定位置截取字符串,當(dāng)指定的截取位置為非負(fù)數(shù)時(shí),則從左往右開(kāi)始截取,第一位為0,后面依次類推,但當(dāng)索引值為負(fù)數(shù)時(shí),則從右往左截取,注意此時(shí)右側(cè)第一位為-1:
a)只指定了起始位置,則截取至字符串末尾:
StringUtils.substring(null, 2); // "" null和""截取后都返回null和""
StringUtils.substring(null, 2); // null
StringUtils.substring("china", 0); // china 指定的起始截取位置為0,則從第一位開(kāi)始截取,也就是不截取
StringUtils.substring("china", 2); // ina 指定的截取位置為2,則從左往右第三位開(kāi)始截取
StringUtils.substring("china", -2); // na 指定的截取位置為-2,則從右往左第二位開(kāi)始截取
????b)指定了起始位置和結(jié)束位置,則從起始位置開(kāi)始截取到結(jié)束位置(但不包含結(jié)束位置):
StringUtils.substring(null, 2, 4); // null null和""截取后都返回null和""
StringUtils.substring("", 2, 4); // ""
StringUtils.substring("china", 0, 0); // ""
StringUtils.substring("china", 2, 4); // in
StringUtils.substring("china", -2, -4); // in
StringUtils.substring("china", 2, -3); // ""
StringUtils.substring("china", 2, -1); // in
????(2)根據(jù)指定的分隔符進(jìn)行截?。ú话摲指舴?br>
??????a)從分隔符第一次出現(xiàn)的位置向后截?。?/p>
StringUtils.substringAfter("china", "i"); // na 從第一次出現(xiàn)"i"的位置向后截取,不包含第一次出現(xiàn)的"i"
StringUtils.substringAfter("china", "hi"); // na
StringUtils.substringAfter("chinachina","h")); // inachina
StringUtils.substringAfter("china", "a"); // ""
StringUtils.substringAfter("china", "d"); // "" 分隔符在要截取的字符串中不存在,則返回""
StringUtils.substringAfter("china", "")); // china 分隔符為"",則返回原字符串
Stringtils.substringAfter("china", null); // "" 分隔符為null,則返回""
??????b)從分隔符最后一次出現(xiàn)的位置向后截?。?/p>
StringUtils.substringAfterLast("china", "i"); // na
StringUtils.substringAfterLast("chinachina", "i"); // na "i"最后出現(xiàn)的位置向后截取
??????c)從分隔符第一次出現(xiàn)的位置向前截?。?/p>
StringUtils.substringBefore("china", "i"); // ch
StringUtils.substringBefore("chinachina", "i"); // ch 從"i"第一次出現(xiàn)的位置向前截取
??????d)從分隔符最后一次出現(xiàn)的位置向前截取:
StringUtils.substringBeforeLast("china", "i");
StringUtils.substringBeforeLast("chinachina", "i"); // chinach
??????e)截取指定標(biāo)記字符串之間的字符序列:
StringUtils.substringBetween(null, "ch") // null
StringUtils.substringBetween("", "") // ""
StringUtils.substringBetween("tagabctag", "") // "" 標(biāo)記字符串為"",則截取后返回""
StringUtils.substringBetween("", "tag") // null // 注意此處返回的是null
StringUtils.substringBetween("tagabctag", null) // null 標(biāo)記字符串為null,則截取后返回null
StringUtils.substringBetween("tagabctag", "tag") // "abc"
二、去除空白:
??去除字符串中的空白符是我們?cè)谔幚碜址畷r(shí)經(jīng)常遇到的問(wèn)題,StringUtils中也封裝了一些非常好用的方法來(lái)幫助我們解決這個(gè)問(wèn)題:
trim(String str)
trimToEmpty(String str)
trimToNull(String str)
strip(String str)
stripToEmpty(String str)
stripToNull(String str)
deleteWhitespace(String str)
??(1)去除字符串首尾的控制符(char ≤ 32)
????a)trim(String str):如果被去除的字符串的為null或"",則返回null和"":
StringUtils.trim(null); // null
StringUtils.trim(""); // ""
StringUtils.trim(" ");// ""
StringUtils.trim("abc"); // abc
StringUtils.trim(" abc "); // abc
StringUtils.trim(" a b c "); // "a b c" 注意此處字符串內(nèi)部的控制符是不去除的
????b)trimToEmpty(String str):如果被去除的字符串的為null或"",則都返回"":
StringUtils.trimToEmpty(null); // "" 此處返回的是""
StringUtils.trimToEmpty(""); // ""
StringUtils.trimToEmpty(" ");// ""
StringUtils.trimToEmpty("abc"); // abc
StringUtils.trimToEmpty(" abc "); // abc
StringUtils.trimToEmpty(" a b c "); // a b c
????c)trimToNull(String str):如果被去除的字符串的為null或"",則都返回null:
StringUtils.trimToNull(null); // null
StringUtils.trimToNull(""); // null
StringUtils.trimToNull(" ");// null
StringUtils.trimToNull("abc"); // abc
StringUtils.trimToNull(" \t\r\nabc "); // abc
StringUtils.trimToNull(" a b c "); // "a b c"
??(2)去除字符串首尾的空白符(空白符主要包括' ','\t','\r','\n'等等,具體的空白符可以參考Java API中Character類中isWhiteSpace()方法中的描述):
????a)trim(String str):如果被去除的字符串的為null或"",則返回null和"":
StringUtils.strip(null); // null
StringUtils.strip(""); // ""
StringUtils.strip(" ");// ""
StringUtils.strip("abc"); // abc
StringUtils.strip(" \t\r\n abc "); // abc
StringUtils.strip(" a b c "); // a b c
????b)trimToEmpty(String str):如果被去除的字符串的為null或"",則都返回"":
StringUtils.stripToEmpty(null); // null
StringUtils.stripToEmpty(""); // nulld
StringUtils.stripToEmpty(" ");// null
StringUtils.stripToEmpty("abc"); // abc
StringUtils.stripToEmpty(" \t\r\n abc "); // abc
StringUtils.stripToEmpty(" a b c "); // "a b c"
????c)trimToNull(String str):如果被去除的字符串的為null或"",則都返回null:
StringUtils.stripToNull(null); // null
StringUtils.stripToNull(""); // nulld
StringUtils.stripToNull(" ");// null
StringUtils.stripToNull("abc"); // abc
StringUtils.stripToNull(" \t\r\n abc "); // abc
StringUtils.stripToNull(" a b c "); // "a b c"
??(2)去除字符串中所有的空白符:
StringUtils.deleteWhitespace(null); // null
StringUtils.deleteWhitespace(""); // ""
StringUtils.deleteWhitespace("abc"); // "abc"
StringUtils.deleteWhitespace(" ab c "); // "abc"
三、包含:
??StringUtils中判斷是否包含的方法主要有:
contains(CharSequence seq, int searchChar)
contains(CharSequence seq, CharSequence searchSeq)
containsIgnoreCase(CharSequence str, CharSequence searchStr)
containsAny(CharSequence cs, char... searchChars)
containsAny(CharSequence cs, CharSequence searchChars)
containsOnly(CharSequence cs,char… valid)
containsOnly(CharSequence cs, String validChars)
containsNone(CharSequence cs,char… searchChars)
containsNone(CharSequence cs, String invalidChars)
startsWith(CharSequence str,CharSequence prefix)
startsWithIgnoreCase(CharSequence str,CharSequence prefix)
startsWithAny(CharSequence string,CharSequence… searchStrings)
??(1)判斷字符串中是否包含指定的字符或字符序列:
????a)區(qū)分大小寫:
StringUtils.contains(null, 'a'); // false
StringUtils.contains("china", null); // false
StringUtils.contains("", 'a'); // false
StringUtils.contains("china", 'a');// true
StringUtils.contains("china", 'z');//false
StringUtils.contains(null, "a"); // false
StringUtils.contains("china", null); // false
StringUtils.contains("", ""); // true
StringUtils.contains("abc", "");// true
StringUtils.contains("china", "na");// true
StringUtils.contains("abc", "z"); // false
????b)不區(qū)分大小寫:
StringUtils.containsIgnoreCase("china", 'a');// true
StringUtils.containsIgnoreCase("china", 'A');// true
StringUtils.containsIgnoreCase("china", 'Z');//false
StringUtils.containsIgnoreCase(null, "A"); // false
StringUtils.containsIgnoreCase("china", null); // false
StringUtils.containsIgnoreCase("", ""); // true
StringUtils.containsIgnoreCase("abc", "");// true
StringUtils.containsIgnoreCase("china", "na");// true
StringUtils.containsIgnoreCase("china", "Na");// true
StringUtils.containsIgnoreCase("abc", "Z"); // false
??(2)判斷字符串中是否包含指定字符集合中或指定字符串中任一字符,區(qū)分大小寫:
StringUtils.containsAny(null, 'a', 'b');// false
StringUtils.containsAny("", 'a', 'b');// false
StringUtils.containsAny("abc", 'a', 'z');// true
StringUtils.containsAny("abc", 'x', 'y');// false
StringUtils.containsAny("abc", 'A', 'z');// false
StringUtils.containsAny(null, "a");// false
StringUtils.containsAny("", "a");// false
StringUtils.containsAny("abc", "ab");// true
StringUtils.containsAny("abc", "ax");// true
StringUtils.containsAny("abc", "xy");// false
StringUtils.containsAny("abc", "Ax");// false
??(3)判斷字符串中是否不包含指定的字符或指定的字符串中的字符,區(qū)分大小寫:
StringUtils.containsNone(null, 'a'); // true
StringUtils.containsNone("", 'a'); // true 注意這里,空串總是返回true
StringUtils.containsNone("china", ' '); // true 注意包含空白符為true
StringUtils.containsNone("china", '\t'); // true
StringUtils.containsNone("china", '\r'); // true
StringUtils.containsNone("china", 'x', 'y', 'z'); // true
StringUtils.containsNone("china", 'c', 'y', 'z'); // false
StringUtils.containsNone("china", 'C', 'y', 'z'); // true
StringUtils.containsNone(null, "a"); // true
StringUtils.containsNone("", "a"); // true
StringUtils.containsNone("china", ""); // true
StringUtils.containsNone("china", "xyz"); // true
StringUtils.containsNone("china", "cyz"); // false
StringUtils.containsNone("china", "Cyz"); // true
??(4)判斷字符串中的字符是否都是出自所指定的字符數(shù)組或字符串,區(qū)分大小寫:
StringUtils.containsOnly(null, 'a');// false
StringUtils.containsOnly("", "a");// true
StringUtils.containsOnly("ab", ' ');// false
StringUtils.containsOnly("abab", 'a', 'b', 'c');// true
StringUtils.containsOnly("abcd", 'a', 'b', 'c');// false
StringUtils.containsOnly("Abab", 'a', 'b', 'c');// false
StringUtils.containsOnly(null, "a");// false
StringUtils.containsOnly("", "a"); // true
StringUtils.containsOnly("abab", "abc));// true
StringUtils.containsOnly("abcd", "abc"); // false
StringUtils.containsOnly("Abab", "abc");// false
??(5)判斷字符串是否以指定的字符序列開(kāi)頭:
????a)區(qū)分大小寫:
StringUtils.startsWith(null, null); // true
StringUtils.startsWith(null, "abc"); // false
StringUtils.startsWith("abcdef", null); // false
StringUtils.startsWith("abcdef", "abc"); // true
StringUtils.startsWith("ABCDEF", "abc"); // false
????b)不區(qū)分大小寫:
StringUtils.startsWithIgnoreCase(null, null);// true
StringUtils.startsWithIgnoreCase(null, "abc");// false
StringUtils.startsWithIgnoreCase("abcdef", null);// false
StringUtils.startsWithIgnoreCase("abcdef", "abc");// true
StringUtils.startsWithIgnoreCase("ABCDEF", "abc");// true
??(6)判斷字符串是否以指定的字符序列數(shù)組中任意一個(gè)開(kāi)頭,區(qū)分大小寫:
StringUtils.startsWithAny(null, null);// false
StringUtils.startsWithAny(null, new String[] { "abc" });// false
StringUtils.startsWithAny("abcxyz", null);// false
StringUtils.startsWithAny("abcxyz", new String[] { "" });// true
StringUtils.startsWithAny("abcxyz", new String[] { "abc" });// true
StringUtils.startsWithAny("abcxyz", new String[] { null, "xyz", "abc" });// true
StringUtils.startsWithAny("abcxyz", null, "xyz", "ABCX");// false
StringUtils.startsWithAny("ABCXYZ", null, "xyz", "abc");// false
四、查詢索引:
??StringUtils中獲取字符或字符序列在字符串中出現(xiàn)的索引下標(biāo)的方法主要有:
indexOf(CharSequence seq, int searchChar)
indexOf(CharSequence seq,CharSequence searchSeq)
indexOfIgnoreCase
indexOf(CharSequence seq,CharSequence searchSeq,int startPos)
lastIndexOf(CharSequence seq,int searchChar)
lastIndexOfIgnoreCase(CharSequence str,CharSequence searchStr)
??(1)獲取指定字符或字符序列在字符串中第一次出現(xiàn)的索引,若字符串中不包含該字符或字符序列,則返回-1,若字符串或字符序列為""或null,也返回-1((但字符串和字符序列都為""的情況下,則返回0)):
????a)區(qū)分大小寫:
StringUtils.indexOf(null, 'a');// -1
StringUtils.indexOf("", 'a');// -1
StringUtils.indexOf("abca", 'a');// 0
StringUtils.indexOf("abca", 'b');// 1
StringUtils.indexOf("abca", 'A');// -1
StringUtils.indexOf(null, "a"); // -1
StringUtils.indexOf("abc", null); // -1
StringUtils.indexOf("", ""); // 0
StringUtils.indexOf("", "a"); // -1 注意這里第二個(gè)參數(shù)為""時(shí)則為0
StringUtils.indexOf("abc", "a"); // 0
StringUtils.indexOf("abc", "b"); // 1
StringUtils.indexOf("abc", "ab"); // 0
StringUtils.indexOf("abc", ""); // 0
????b)不區(qū)分大小寫:
StringUtils.indexOfIgnoreCase(null, "a"); // -1
StringUtils.indexOfIgnoreCase("abc", null); // -1
StringUtils.indexOfIgnoreCase("", ""); // 0
StringUtils.indexOfIgnoreCase("", "a");// -1
StringUtils.indexOfIgnoreCase("abc", "b));// 1
StringUtils.indexOfIgnoreCase("abc", "B"); // 1
??(1)獲取字符序列在字符串中指定位置之后第一次出現(xiàn)的索引,若字符串中指定位置之后不包含該字符序列,則返回-1,若字符串或字符序列為""或null,也返回-1(但字符串和字符序列都為""的情況下,結(jié)果就有點(diǎn)怪異,有時(shí)返回0,有時(shí)返回1,有時(shí)返回-1,根據(jù)指定的起始位置會(huì)有變化):
????a)區(qū)分大小寫:
StringUtils.indexOf(null, "a", 2); // -1
StringUtils.indexOf("abc", null, 2); // -1
StringUtils.indexOf("", "", 0); // 0 注意此處和下一行都返回0,對(duì)比忽略大小寫的情形,就有點(diǎn)不一樣
StringUtils.indexOf("", "", 1); // 0
StringUtils.indexOf("", "", 2); // 0
StringUtils.indexOf("", "a", 0); // -1 不包括第二個(gè)參數(shù)為""的情況
StringUtils.indexOf("abac", "a", 1); // 2
StringUtils.indexOf("abcab", "ab", 2); // 3
StringUtils.indexOf("abc", "a", -1); // 0 -1被當(dāng)作是0
StringUtils.indexOf("abc", "a", 2); // -1
????b)不區(qū)分大小寫:
StringUtils.indexOfIgnoreCase("", "", 0)); // 0
StringUtils.indexOfIgnoreCase("", "", 0)); // 1 與不忽略大小寫的情況不同,下面也是
StringUtils.indexOfIgnoreCase("", "", 0)); //-1
StringUtils.indexOfIgnoreCase("abac", "A", 1)); // 2
StringUtils.indexOfIgnoreCase("abcab", "AB", 2)); // 3
StringUtils.indexOfIgnoreCase("abc", "B", -1)); // 1 -1被當(dāng)作是0
??(2)獲取指定字符或字符序列在字符串中最后一次出現(xiàn)的索引,若字符串中不包含該字符序列,則返回-1,若字符串或字符序列為""或null,也返回-1(但字符串和字符序列都為""的情況下,返回0):
????a)區(qū)分大小寫:
StringUtils.lastIndexOf(null, 'a'));// -1
StringUtils.lastIndexOf("", 'a'));// -1
StringUtils.lastIndexOf("abccba", 'a'));// 5
StringUtils.lastIndexOf("abccba", 'z'));// -1
StringUtils.lastIndexOf(null, "a"));// -1
StringUtils.lastIndexOf("abc", null));// -1
StringUtils.lastIndexOf("", ""));// 0
StringUtils.lastIndexOf("abc", "b"));// 1
StringUtils.lastIndexOf("abc", "ab"));// 0
StringUtils.lastIndexOf("abc", ""));// 3 返回字符串的長(zhǎng)度
????b)不區(qū)分大小寫:
StringUtils.lastIndexOfIgnoreCase(null, "a");// -1
StringUtils.lastIndexOfIgnoreCase("abc", null);// -1
StringUtils.lastIndexOfIgnoreCase("", "");// 0
StringUtils.lastIndexOfIgnoreCase("abc", "B");// 1
StringUtils.lastIndexOfIgnoreCase("abc", "AB");// 0
StringUtils.lastIndexOfIgnoreCase("abc", "");// 3 返回字符串的長(zhǎng)度