apache commons StringUtils介紹

jopen 10年前發布 | 24K 次閱讀 常用工具包 StringUtils

StringUtils是apache commons lang庫(http://commons.apache.org/lang)旗下的一個工具類,提供了很多有用的處理字符串的方法,本文不打算把所有的方法都介紹一遍,我會介紹一些精選的常用的給大家。 

目前StringUtils有兩個版本可用,分別是較新的org.apache.commons.lang3.StringUtils和較老的 org.apache.commons.lang.StringUtils,他們有比較大的區別,前者需要JAVA 5,我想這個應該是我們希望使用的。 

1)public static boolean equals(CharSequence str1,CharSequence str2) 

我們就先從最簡單的方法equals開始,和你想的一樣,他需要兩個字符串參數,當相同的時候返回true,否則返回false。 

但是java.lang.String已經有現成的比較完美的equals方法了,為何我們還需要一個第三方的實現呢? 

這個問題很好,讓我們來看看下面這些代碼,看看有何問題? 

Java代碼 
</div>

  1. public void doStuffWithString(String stringParam) {    
  2. if(stringParam.equals("MyStringValue")) {    
  3. // do stuff }    
  4. }   
  5. </ol> </div> 這個可能有NullPointerException出現,那么有幾個辦法處理: 

    Java代碼 
    </div>

    1. public void safeDoStuffWithString1(String stringParam) {    
    2. if(stringParam != null &amp;&amp;    
    3. stringParam.equals("MyStringValue")) {    
    4. // do stuff    
    5. }    
    6. }     
    7. public void safeDoStuffWithString2(String stringParm) {    
    8. if("MyStringValue".equals(stringParam))    
    9. {    
    10. // do stuff    
    11. }    
    12. }   
    13. </ol> </div> 我本人不喜歡上面的兩個方法,第一個看起來太臃腫,第二個看起來像錯誤的。這里我們就可以用一些StringUtils類了,這個類提供的equals方法是空指針安全的,不用擔心傳遞給他的是什么參數,他不會拋出空指針異常,這樣寫: 

      Java代碼 
      </div>

      1. public void safeDoStuffWithString3(String stringParam) {   
      2. if(StringUtils.equals(stringParam,"MyStringValue))    
      3. {    
      4. // do stuff    
      5. }    
      6. }   
      7. </ol> </div> 這個是我個人的喜好,但是這個確實看起來比較簡單易讀。前面的兩個方法雖然么有什么問題,但是我想StringUtils.equals還是值得考慮的。 

        2)isEmpty,isNotEmpty,isBlank,isNotBlank 

        和前面一樣,這些方法相對于jdk提供的isEmpty方法來說,多了一個“空指針安全”,即不用考慮傳遞參數的空值問題,讓我們來看一個例子: 

        Java代碼 
        </div>

        1. if(myString != null && !myString.isEmpty()) {    
        2. // 有點臃腫是把?   
        3. // Do stuff with myString    
        4. }    
        5.     
        6. if(StringUtils.isNotEmpty(myString)) { // 好多了吧    
        7. // Do stuff with myString    
        8. }   
        9. </ol> </div> Blank和empty的區別 

          isBlank將在字符串含有空白字符的時候,返回true,例如: 

          Java代碼 
          </div>

          1. String someWhiteSpace = " \t \n";    
          2. StringUtils.isEmpty(someWhiteSpace); // false    
          3. StringUtils.isBlank(someWhiteSpace); // true   
          4. </ol> </div> 3)public static String[] split(String str,String separatorChars) 
            當然,這個方法相對于String.split也是空指針安全的,當你嘗試split一個null字符串的時候,將返回Null,一個Null的分隔符將按照空白字符分隔字符串,但是,還有一個理由讓你可考慮使用StringUtils.split()方法,就是jdk自帶的String.split由于支持正則表達式進行分隔,所以可能帶來意想不到的后果,例如: 

            Java代碼 
            </div>

            1. public void possiblyNotWhatYouWant() {   
            2. String contrivedExampleString = "one.two.three.four";    
            3. String[] result = contrivedExampleString.split(".");    
            4. System.out.println(result.length); // 0    
            5. }  
            6. </ol> </div> 上面很明顯你希望按照.分隔,但是jdk理解的“.”是正則表達式的任意字符,導致字符串內任意字符都匹配,返回一個size=0的字符串數組。其實你只要傳遞"\\."就行了,但是這個確實是一個問題。  
              這樣,使用StringUtils.split就簡單多了,另外,我測試還發現StringUtils.split比jdk自帶的split要快四倍。 

              4)public static String join(Iterable iterable,String separator) 
              這個方法確實很實用,因為jdk自身沒有提供,簡單使用方法: 

              Java代碼 
              </div>

              1. String[] numbers = {"one""two""three"};   
              2. StringUtils.join(numbers,","); // returns "one,two,three"   
              3. </ol> </div> 當然你可以傳遞一個數字或者迭代序列iterators. 

                好了,我確信,這個庫確實是一個比較實用的庫,推薦大家使用。 

                API請參考:http://commons.apache.org/lang/api-3.1/org/apache/commons/lang3/StringUtils.html

                下面分別對一些常用方法做簡要介紹:

                1. public static boolean isEmpty(String str) 
                   判斷某字符串是否為空,為空的標準是 str==null 或 str.length()==0 
                   下面是 StringUtils 判斷是否為空的示例:

                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\tss   \b") = "ss"
                      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 int lastIndexOf(String str, char searchChar) 
                    基本原理同18

                24. public static int lastIndexOf(String str, char searchChar, int startPos) 
                    基本原理同19

                25. public static int lastIndexOf(String str, String searchStr) 
                    基本原理同20

                26. public static int lastIndexOf(String str, String searchStr, int startPos)

               本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
               轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
               本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!