2012年3月7日 星期三

Lang

Jakarta 中 的 common-lang, 提供許多 java.lang.* 額外的 methods, 這次先說明 StringUtils 的一些常用的範例.

/**
 * Checks if a String is whitespace, empty ("") or null. (判斷 string 是否是空白, "" 或 null)
 */
    String str = " ";
    System.out.println(StringUtils.isBlank(str)); // true

    str = " abc ";
    System.out.println(StringUtils.isBlank(str)); // false

    str = " "; // 全形
    System.out.println(StringUtils.isBlank(str)); // true

    str = null;
    System.out.println(StringUtils.isBlank(str)); // true
    // 如果用 StringUtils.isNotBlank() <-- 則以上結果會相反

/**
 * Checks if a String is empty ("") or null. (判斷 string 是否是 "" 或 null, 與blank 的差別在於 whitespace )
 */

    String str = " ";
    System.out.println(StringUtils.isEmpty(str)); // false

    str = " abc ";
    System.out.println(StringUtils.isEmpty(str)); // false

    str = " "; // 全形
    System.out.println(StringUtils.isEmpty(str)); // false

    str = null;
    System.out.println(StringUtils.isEmpty(str)); // true
    // 如果用 StringUtils.isNotEmpty() <--則以上結果會相反


/**
 * Compares two Strings, returning true if they are equal. (比較2個字串, 回傳是否相等) 
 * nulls are handled without exceptions. (當 null 時, 不會發生 exception) 
 * Two null references are considered to be equal. (皆為 null 時, 則認為是相同的.) 
 * The comparison is case sensitive. (大小寫有差別)
 */

    System.out.println(StringUtils.equals(null, null)); // true
    System.out.println(StringUtils.equals(null, "abc")); // false
    System.out.println(StringUtils.equals("abc", null)); // false
    System.out.println(StringUtils.equals("abc", "abc")); // true
    System.out.println(StringUtils.equals("abc", "ABC")); // false


/**
 * 與 StringUtils.equals 的差別在於呼略大小寫
 */
    System.out.println(StringUtils.equalsIgnoreCase(null, null)); // true
    System.out.println(StringUtils.equalsIgnoreCase(null, "abc")); // false
    System.out.println(StringUtils.equalsIgnoreCase("abc", null)); // false
    System.out.println(StringUtils.equalsIgnoreCase("abc", "abc")); // true
    System.out.println(StringUtils.equalsIgnoreCase("abc", "ABC")); // true
使用 StringUtils 可以減少錯誤的發生, 也可以少寫一些 code!
當然, 他的速度並不會比較慢唷, 如果基礎有打好的話, 用一些別人寫的好來開發, 或許是個不錯的選擇.


2012/03/07 補充 :
lang 目前已提供 3.x 版, 未來會提供 4 版, 主要的差別是配合 jdk 的版本一起升級, 2.6 之前有向下相容, 3.x 目前之援 jdk 5 以上


StringUtils 從原本的 org.apache.commons.lang.StringUtils 換成 org.apache.commons.lang3.StringUtils

以下再提供一些好用又常用的介紹 :
StringUtils --
1. StringUtils.defaltIfEmpty / StringUtils.defaultIfBlank 給初始值
   StringUtils.defaultIfEmpty(request.getParameter("testParameter"), null);  // 當抓不到值時要給什麼初始值      
   StringUtils.defaultIfBlank(request.getParameter("testParameter"), null);  // 當抓不到值時要給什麼初始值
   

  2. StringUtils.IsAlpha/IsNumeric/IsWhitespace/IsAsciiPrintable - checks the characters in a String
    // 是否是英文字
    StringUtils.isAlpha("abc")  = true
    StringUtils.isAlpha("123")  = false

    // 是否是數字
    StringUtils.isNumeric("123") = true
    StringUtils.isNumeric("abc") = false

    // 是否是英數字
    StringUtils.isAlphanumeric("abc123") = true
    StringUtils.isAlphanumeric("abc123 ") = false
    StringUtils.isAlphanumeric("abc123 .,;") = false

    // 是否是英數字空白
    StringUtils.isAlphanumericSpace("abc123") = true
    StringUtils.isAlphanumericSpace("abc123 ") = true
    StringUtils.isAlphanumericSpace("abc123 .,;") = false

    ....

  3. 包含字串或字元

    // 字串
    StringUtils.contains(null, *)     = false
    StringUtils.contains(*, null)     = false
    StringUtils.contains("", "")      = true
    StringUtils.contains("abc", "")   = true
    StringUtils.contains("abc", "a")  = true
    StringUtils.contains("abc", "z")  = false
 
    // 字元
    StringUtils.contains("abc", 'z')  = false
    StringUtils.contains("abc", 'a')  = true

  其它 : remove, removeEnd, replace .... 請參考 api, 有很完善的教學

RandomStringUtils --
// 英文
    RandomStringUtils.randomAlphabetic(5)  = aSwqE 大小寫英文

    // 英數 
    RandomStringUtils.randomAlphanumeric(5) = 12ABc

    // 數字
    RandomStringUtils.randomNumeric(5) = 12341

    // 自定
    random(int count, boolean letters, boolean numbers)   
    random(int count, String chars)
    RandomStringUtils.random(5, "abcd1234") = 123dc

org.apache.commons.lang3.math.NumberUtils --
createBigDecimal / createFloat / createDouble ...
    BigDecimal bigDecimal = NumberUtils.createBigDecimal("99999999999999") // 將字串轉成 BigDecimal
    
    min // 最出 array 最小值
    NumberUtils.min(new int[] { 3, 1, 10, 100, 99, -10, 20 }) = -10 

    max // 最出 array 最小值
    NumberUtils.max(new int[] { 3, 1, 10, 100, 99, -10, 20 }) = 100 

沒有留言:

張貼留言