在JAVA中我們用的最多的類應該就是String了。對於String的處理說簡單也簡單,但是有的時候要自己去實現一些功能還是要浪費一點時間的。一年之前接觸了StringUtils這個工具類,就猛然愛上了它,日復一日心裏始終覺得這東西實在太好了。不敢獨享,所以決定要總結一下個人使用StringUtils的一些心得。
1.StringUtils.isEmpty(String str)
經常需要去判斷一個字符串是否爲空,null,""。使用該方法可以輕鬆得到結論:
StringUtils.isEmpty(null) = true StringUtils.isEmpty("") = true StringUtils.isEmpty(" ") = false StringUtils.isEmpty(" ") = false StringUtils.isEmpty("aa") = false StringUtils.isEmpty(" aaa ") = false
2.StringUtils.isNotEmpty(String str)
判斷字符串是否非空,通過查看commons.lang.StringUtils的源碼可以發現isNotEmpty是這樣實現的:
public static boolean isNotEmpty(String str) {
return !isEmpty(str);
}
使用和1中一樣的參數調用isNotEmpty(String str)得到的結果:
StringUtils.isNotEmpty(null);//false StringUtils.isNotEmpty("");//false StringUtils.isNotEmpty(" ");//true StringUtils.isNotEmpty(" ");//true StringUtils.isNotEmpty("aa");//true StringUtils.isNotEmpty(" aaa ");//true
3.StringUtils.isBlank(String str)
判斷字符串是否爲空和空字符
System.out.println(StringUtils.isBlank(null));//true System.out.println(StringUtils.isBlank(""));//true System.out.println(StringUtils.isBlank(" "));//true System.out.println(StringUtils.isBlank(" "));//true System.out.println(StringUtils.isBlank("\n\t"));//true System.out.println(StringUtils.isBlank("aaa"));//false System.out.println(StringUtils.isBlank(" aa "));//false
4.StringUtils.isNotBlank(String str)
和之前說的isNotEmpty(String str) 一樣該方法也是: retrurn !isBlank(str);
5.StringUtils.defaultIfEmpty(String str, String defalutValue)
如果字符串爲""或者 null 則替換成參數2中的字符串:
System.out.println("1: " + StringUtils.defaultIfEmpty("", "a"));//1: a
System.out.println("2: " + StringUtils.defaultIfEmpty("\n\t", "a"));//2: System.out.println("3: " + StringUtils.defaultIfEmpty("", "a"));//3: a System.out.println("4: " + StringUtils.defaultIfEmpty(" ", "a"));//4: System.out.println("5: " + StringUtils.defaultIfEmpty("aaa", "a"));//5: aaa System.out.println("6: " + StringUtils.defaultIfEmpty(" aaa ", "a"));//6: aaa System.out.println("7: " + StringUtils.defaultIfEmpty(null, "a"));//7: a
6. StringUtils.defaultString(String str, String defaultValue)
和5相似:
System.out.println("1: " + StringUtils.defaultString(null, "a"));//1: a System.out.println("2: " + StringUtils.defaultString("", "a"));//2: System.out.println("3: " + StringUtils.defaultString(" ", "a"));//3: System.out.println("4: " + StringUtils.defaultString("\n\t", "a"));//4: System.out.println("5: " + StringUtils.defaultString("aa", "a"));//5: aa System.out.println("6: " + StringUtils.defaultString(" aaa", "a"));//6: aaa
7.StringUtils.capitalize(String str)
首字母大寫
System.out.println(StringUtils.capitalize("xxxx"));//Xxxx
System.out.println(StringUtils.capitalize("Xxxx"));//Xxxx System.out.println(StringUtils.capitalize(" xxxx"));// xxxx
8.StringUtils.remove(String str, String removeStr)
從str中去除removeStr
System.out.println(StringUtils.remove("abcd", "ab"));//cd System.out.println(StringUtils.remove("abcd", "ad"));//abcd
類似方法有
StringUtils.removeEnd(arg0, arg1)
StringUtils.removeStart(arg0, arg1)
9.StringUtils.countMatches(String str, String find)
計算字符串在另一個字符串中出現的次數:
int nCount = StringUtils.countMatches("UPDATE tb_table SET xx=?,xyz=?, sss=? WHERE id=?", "?");
nCount = 4
這個方法甚妙!個人使用這個方法寫了一個自動給預編譯語句設置參數的方法,用起來得心應手省了不少事!
10.常用用法舉例
public static void TestStr(){ //null 和 ""操作~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //判斷是否Null 或者 "" System.out.println(StringUtils.isEmpty(null)); System.out.println(StringUtils.isNotEmpty(null)); //判斷是否null 或者 "" 去空格~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ System.out.println(StringUtils.isBlank(" ")); System.out.println(StringUtils.isNotBlank(null)); //去空格.Null返回null~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ System.out.println(StringUtils.trim(null)); //去空格,將Null和"" 轉換爲Null System.out.println(StringUtils.trimToNull("")); //去空格,將NULL 和 "" 轉換爲"" System.out.println(StringUtils.trimToEmpty(null)); //可能是對特殊空格符號去除?? System.out.println(StringUtils.strip("大家好 啊 \t")); //同上,將""和null轉換爲Null System.out.println(StringUtils.stripToNull(" \t")); //同上,將""和null轉換爲"" System.out.println(StringUtils.stripToEmpty(null)); //將""或者Null 轉換爲 "" System.out.println(StringUtils.defaultString(null)); //僅當字符串爲Null時 轉換爲指定的字符串(二參數) System.out.println(StringUtils.defaultString("", "df")); //當字符串爲null或者""時,轉換爲指定的字符串(二參數) System.out.println(StringUtils.defaultIfEmpty(null, "sos")); //去空格.去字符~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //如果第二個參數爲null去空格(否則去掉字符串2邊一樣的字符,到不一樣爲止) System.out.println(StringUtils.strip("fsfsdf", "f")); //如果第二個參數爲null只去前面空格(否則去掉字符串前面一樣的字符,到不一樣爲止) System.out.println(StringUtils.stripStart("ddsuuu ", "d")); //如果第二個參數爲null只去後面空格,(否則去掉字符串後面一樣的字符,到不一樣爲止) System.out.println(StringUtils.stripEnd("dabads", "das")); //對數組沒個字符串進行去空格。 //ArrayToList(StringUtils.stripAll(new String[]{" 中華 ", "民 國 ", "共和 "})); //如果第二個參數爲null.對數組每個字符串進行去空格。(否則去掉數組每個元素開始和結尾一樣的字符) //ArrayToList(StringUtils.stripAll(new String[]{" 中華 ", "民 國", "國共和國"}, "國")); //查找,判斷~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //判斷2個字符串是否相等相等,Null也相等 System.out.println(StringUtils.equals(null, null)); //不區分大小寫比較 System.out.println(StringUtils.equalsIgnoreCase("abc", "ABc")); //查找,不知道怎麼弄這麼多查找,很多不知道區別在哪?費勁~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //普通查找字符,如果一參數爲null或者""返回-1 System.out.println(StringUtils.indexOf(null, "a")); //從指定位置(三參數)開始查找,本例從第2個字符開始查找k字符 System.out.println(StringUtils.indexOf("akfekcd中華", "k", 2)); //未發現不同之處 System.out.println(StringUtils.ordinalIndexOf("akfekcd中華", "k", 2)); //查找,不區分大小寫 System.out.println(StringUtils.indexOfIgnoreCase("adfs", "D")); //從指定位置(三參數)開始查找,不區分大小寫 System.out.println(StringUtils.indexOfIgnoreCase("adfs", "a", 3)); //從後往前查找 System.out.println(StringUtils.lastIndexOf("adfas", "a")); //未理解,此結果爲2 System.out.println(StringUtils.lastIndexOf("d餓abasdafs我", "a", 3)); //未解,此結果爲-1 System.out.println(StringUtils.lastOrdinalIndexOf("yksdfdht", "f", 2)); //從後往前查,不區分大小寫 System.out.println(StringUtils.lastIndexOfIgnoreCase("sdffet", "E")); //未解,此結果爲1 System.out.println(StringUtils.lastIndexOfIgnoreCase("efefrfs看", "F" , 2)); //檢查是否查到,返回boolean,null返回假 System.out.println(StringUtils.contains("sdf", "dg")); //檢查是否查到,返回boolean,null返回假,不區分大小寫 System.out.println(StringUtils.containsIgnoreCase("sdf", "D")); //檢查是否有含有空格,返回boolean System.out.println(StringUtils.containsWhitespace(" d")); //查詢字符串跟數組任一元素相同的第一次相同的位置 System.out.println(StringUtils.indexOfAny("absfekf", new String[]{"f", "b"})); //查詢字符串中指定字符串(參數二)出現的次數 System.out.println(StringUtils.indexOfAny("afefes", "e")); //查找字符串中是否有字符數組中相同的字符,返回boolean System.out.println(StringUtils.containsAny("asfsd", new char[]{'k', 'e', 's'})); //未理解與lastIndexOf不同之處。是否查到,返回boolean System.out.println(StringUtils.containsAny("啡f咖啡", "咖")); //未解 System.out.println(StringUtils.indexOfAnyBut("seefaff", "af")); //判斷字符串中所有字符,都是出自參數二中。 System.out.println(StringUtils.containsOnly("中華華", "華")); //判斷字符串中所有字符,都是出自參數二的數組中。 System.out.println(StringUtils.containsOnly("中華中", new char[]{'中', '華'})); //判斷字符串中所有字符,都不在參數二中。 System.out.println(StringUtils.containsNone("中華華", "國")); //判斷字符串中所有字符,都不在參數二的數組中。 System.out.println(StringUtils.containsNone("中華中", new char[]{'中', '達人'})); //從後往前查找字符串中與字符數組中相同的元素第一次出現的位置。本例爲4 System.out.println(StringUtils.lastIndexOfAny("中國人民共和國", new String[]{"國人", "共和"})); //未發現與indexOfAny不同之處 查詢字符串中指定字符串(參數二)出現的次數 System.out.println(StringUtils.countMatches("中國人民共和中國", "中國")); //檢查是否CharSequence的只包含Unicode的字母。空將返回false。一個空的CharSequence(長()= 0)將返回true System.out.println(StringUtils.isAlpha("這是幹什麼的2")); //檢查是否只包含Unicode的CharSequence的字母和空格('')。空將返回一個空的CharSequence假(長()= 0)將返回true。 System.out.println(StringUtils.isAlphaSpace("NBA直播 ")); //檢查是否只包含Unicode的CharSequence的字母或數字。空將返回false。一個空的CharSequence(長()= 0)將返回true。 System.out.println(StringUtils.isAlphanumeric("NBA直播")); //如果檢查的Unicode CharSequence的只包含字母,數字或空格('')。空將返回false。一個空的CharSequence(長()= 0)將返回true。 System.out.println(StringUtils.isAlphanumericSpace("NBA直播")); //檢查是否只包含ASCII可CharSequence的字符。空將返回false。一個空的CharSequence(長()= 0)將返回true。 System.out.println(StringUtils.isAsciiPrintable("NBA直播")); //檢查是否只包含數值。 System.out.println(StringUtils.isNumeric("NBA直播")); //檢查是否只包含數值或者空格 System.out.println(StringUtils.isNumericSpace("33 545")); //檢查是否只是空格或""。 System.out.println(StringUtils.isWhitespace(" ")); //檢查是否全是英文小寫。 System.out.println(StringUtils.isAllLowerCase("kjk33")); //檢查是否全是英文大寫。 System.out.println(StringUtils.isAllUpperCase("KJKJ")); //交集操作~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //去掉參數2字符串中在參數一中開頭部分共有的部分,結果爲:人民共和加油 System.out.println(StringUtils.difference("中國加油", "中國人民共和加油")); //統計2個字符串開始部分共有的字符個數 System.out.println(StringUtils.indexOfDifference("ww.taobao", "www.taobao.com")); //統計數組中各個元素的字符串開始都一樣的字符個數 System.out.println(StringUtils.indexOfDifference(new String[] {"中國加油", "中國共和", "中國人民"})); //取數組每個元素共同的部分字符串 System.out.println(StringUtils.getCommonPrefix(new String[] {"中國加油", "中國共和", "中國人民"})); //統計參數一中每個字符與參數二中每個字符不同部分的字符個數 System.out.println(StringUtils.getLevenshteinDistance("中國共和發國人民", "共和國")); //判斷開始部分是否與二參數相同 System.out.println(StringUtils.startsWith("中國共和國人民", "中國")); //判斷開始部分是否與二參數相同。不區分大小寫 System.out.println(StringUtils.startsWithIgnoreCase("中國共和國人民", "中國")); //判斷字符串開始部分是否與數組中的某一元素相同 System.out.println(StringUtils.startsWithAny("abef", new String[]{"ge", "af", "ab"})); //判斷結尾是否相同 System.out.println(StringUtils.endsWith("abcdef", "def")); //判斷結尾是否相同,不區分大小寫 System.out.println(StringUtils.endsWithIgnoreCase("abcdef", "Def")); //字符串截取~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //截取指定位置的字符,null返回null.""返回"" System.out.println(StringUtils.substring("國民黨", 2)); //截取指定區間的字符 System.out.println(StringUtils.substring("中國人民共和國", 2, 4)); //從左截取指定長度的字符串 System.out.println(StringUtils.left("說點什麼好呢", 3)); //從右截取指定長度的字符串 System.out.println(StringUtils.right("說點什麼好呢", 3)); //從第幾個開始截取,三參數表示截取的長度 System.out.println(StringUtils.mid("說點什麼好呢", 3, 2)); //截取到等於第二個參數的字符串爲止 System.out.println(StringUtils.substringBefore("說點什麼好呢", "好")); //從左往右查到相等的字符開始,保留後邊的,不包含等於的字符。本例:什麼好呢 System.out.println(StringUtils.substringAfter("說點什麼好呢", "點")); //這個也是截取到相等的字符,但是是從右往左.本例結果:說點什麼好 System.out.println(StringUtils.substringBeforeLast("說點什麼好點呢", "點")); //這個截取同上是從右往左。但是保留右邊的字符 System.out.println(StringUtils.substringAfterLast("說點什麼好點呢?", "點")); //截取查找到第一次的位置,和第二次的位置中間的字符。如果沒找到第二個返回null。本例結果:2010世界盃在 System.out.println(StringUtils.substringBetween("南非2010世界盃在南非,在南非", "南非")); //返回參數二和參數三中間的字符串,返回數組形式 //ArrayToList(StringUtils.substringsBetween("[a][b][c]", "[", "]")); //分割~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //用空格分割成數組,null爲null //ArrayToList(StringUtils.split("中華 人民 共和")); //以指定字符分割成數組 //ArrayToList(StringUtils.split("中華 ,人民,共和", ",")); //以指定字符分割成數組,第三個參數表示分隔成數組的長度,如果爲0全體分割 //ArrayToList(StringUtils.split("中華 :人民:共和", ":", 2)); //未發現不同的地方,指定字符分割成數組 //ArrayToList(StringUtils.splitByWholeSeparator("ab-!-cd-!-ef", "-!-")); //未發現不同的地方,以指定字符分割成數組,第三個參數表示分隔成數組的長度 //ArrayToList(StringUtils.splitByWholeSeparator("ab-!-cd-!-ef", "-!-", 2)); //分割,但" "不會被忽略算一個元素,二參數爲null默認爲空格分隔 //ArrayToList(StringUtils.splitByWholeSeparatorPreserveAllTokens(" ab de fg ", null)); //同上,分割," "不會被忽略算一個元素。第三個參數代表分割的數組長度。 //ArrayToList(StringUtils.splitByWholeSeparatorPreserveAllTokens("ab de fg", null, 3)); //未發現不同地方,分割 //ArrayToList(StringUtils.splitPreserveAllTokens(" ab de fg ")); //未發現不同地方,指定字符分割成數組 //ArrayToList(StringUtils.splitPreserveAllTokens(" ab de fg ", null)); //未發現不同地方,以指定字符分割成數組,第三個參數表示分隔成數組的長度 //ArrayToList(StringUtils.splitPreserveAllTokens(" ab de fg ", null, 2)); //以不同類型進行分隔 //ArrayToList(StringUtils.splitByCharacterType("AEkjKr i39:。中文")); //未解 //ArrayToList(StringUtils.splitByCharacterTypeCamelCase("ASFSRules234")); //拼接~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //將數組轉換爲字符串形式 System.out.println(StringUtils.concat(getArrayData())); //拼接時用參數一得字符相連接.注意null也用連接符連接了 System.out.println(StringUtils.concatWith(",", getArrayData())); //也是拼接。未發現區別 System.out.println(StringUtils.join(getArrayData())); //用連接符拼接,爲發現區別 System.out.println(StringUtils.join(getArrayData(), ":")); //拼接指定數組下標的開始(三參數)和結束(四參數,不包含)的中間這些元素,用連接符連接 System.out.println(StringUtils.join(getArrayData(), ":", 1, 3)); //用於集合連接字符串.用於集合 System.out.println(StringUtils.join(getListData(), ":")); //移除,刪除~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //刪除所有空格符 System.out.println(StringUtils.deleteWhitespace(" s 中 你 4j")); //移除開始部分的相同的字符 System.out.println(StringUtils.removeStart("www.baidu.com", "www.")); //移除開始部分的相同的字符,不區分大小寫 System.out.println(StringUtils.removeStartIgnoreCase("www.baidu.com", "WWW")); //移除後面相同的部分 System.out.println(StringUtils.removeEnd("www.baidu.com", ".com")); //移除後面相同的部分,不區分大小寫 System.out.println(StringUtils.removeEndIgnoreCase("www.baidu.com", ".COM")); //移除所有相同的部分 System.out.println(StringUtils.remove("www.baidu.com/baidu", "bai")); //移除結尾字符爲"\n", "\r", 或者 "\r\n". System.out.println(StringUtils.chomp("abcrabc\r")); //也是移除,未解。去結尾相同字符 System.out.println(StringUtils.chomp("baidu.com", "com")); //去掉末尾最後一個字符.如果是"\n", "\r", 或者 "\r\n"也去除 System.out.println(StringUtils.chop("wwe.baidu")); //替換~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //替換指定的字符,只替換第一次出現的 System.out.println(StringUtils.replaceOnce("www.baidu.com/baidu", "baidu", "hao123")); //替換所有出現過的字符 System.out.println(StringUtils.replace("www.baidu.com/baidu", "baidu", "hao123")); //也是替換,最後一個參數表示替換幾個 System.out.println(StringUtils.replace("www.baidu.com/baidu", "baidu", "hao123", 1)); //這個有意識,二三參數對應的數組,查找二參數數組一樣的值,替換三參數對應數組的值。本例:baidu替換爲taobao。com替換爲net System.out.println(StringUtils.replaceEach("www.baidu.com/baidu", new String[]{"baidu", "com"}, new String[]{"taobao", "net"})); //同上,未發現不同 System.out.println(StringUtils.replaceEachRepeatedly("www.baidu.com/baidu", new String[]{"baidu", "com"}, new String[]{"taobao", "net"})); //這個更好,不是數組對應,是字符串參數二和參數三對應替換.(二三參數不對應的話,自己看後果) System.out.println(StringUtils.replaceChars("www.baidu.com", "bdm", "qo")); //替換指定開始(參數三)和結束(參數四)中間的所有字符 System.out.println(StringUtils.overlay("www.baidu.com", "hao123", 4, 9)); //添加,增加~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //複製參數一的字符串,參數二爲複製的次數 System.out.println(StringUtils.repeat("ba", 3)); //複製參數一的字符串,參數三爲複製的次數。參數二爲複製字符串中間的連接字符串 System.out.println(StringUtils.repeat("ab", "ou", 3)); //如何字符串長度小於參數二的值,末尾加空格補全。(小於字符串長度不處理返回) System.out.println(StringUtils.rightPad("海川", 4)); //字符串長度小於二參數,末尾用參數三補上,多於的截取(截取補上的字符串) System.out.println(StringUtils.rightPad("海川", 4, "河流啊")); //同上在前面補全空格 System.out.println(StringUtils.leftPad("海川", 4)); //字符串長度小於二參數,前面用參數三補上,多於的截取(截取補上的字符串) System.out.println(StringUtils.leftPad("海川", 4, "大家好")); //字符串長度小於二參數。在兩側用空格平均補全(測試後面補空格優先) System.out.println(StringUtils.center("海川", 3)); //字符串長度小於二參數。在兩側用三參數的字符串平均補全(測試後面補空格優先) System.out.println(StringUtils.center("海川", 5, "流")); //只顯示指定數量(二參數)的字符,後面以三個點補充(參數一截取+三個點=二參數) System.out.println(StringUtils.abbreviate("中華人民共和國", 5)); //2頭加點這個有點亂。本例結果: ...ijklmno System.out.println(StringUtils.abbreviate("abcdefghijklmno", 12, 10)); //保留指定長度,最後一個字符前加點.本例結果: ab.f System.out.println(StringUtils.abbreviateMiddle("abcdef", ".", 4)); //轉換,刷選~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //轉換第一個字符爲大寫.如何第一個字符是大寫原始返回 System.out.println(StringUtils.capitalize("Ddf")); //轉換第一個字符爲大寫.如何第一個字符是大寫原始返回 System.out.println(StringUtils.uncapitalize("DTf")); //反向轉換,大寫變小寫,小寫變大寫 System.out.println(StringUtils.swapCase("I am Jiang, Hello")); //將字符串倒序排列 System.out.println(StringUtils.reverse("中國人民")); //根據特定字符(二參數)分隔進行反轉 System.out.println(StringUtils.reverseDelimited("中:國:人民", ':')); }
//將數組轉換爲List
private static void ArrayToList(String[] str){ System.out.println(Arrays.asList(str) + " 長度:" + str.length); }
//獲得集合數據
private static List getListData(){ List list = new ArrayList(); list.add("你好"); list.add(null); list.add("他好"); list.add("大家好"); return list; }
//獲得數組數據
private static String[] getArrayData(){ return (String[]) getListData().toArray(new String[0]); } public static void main(String[] args) { TestStr(); }