Fork me on GitHub

commons-lang源码解析之StringUtils

apache的commons工具包是平时使用最多的工具包之一,对其实现方式需要具体了解。commons-lang version 3.1

empty和blank的区别

StringUtils中判断String是否为空的判断方法有4个:

StringUtils.isEmpty(CharSequence cs);
StringUtils.isNotEmpty(CharSequence cs);
StringUtils.isBlank(CharSequence cs);
StringUtils.isNotBlank(CharSequence cs);

        四个方法,从命名可以看出是两对相反的判断函数,empty和blank的主要差别在于对于空白字符的处理上面,empty认为空白字符是一个有效字符,blank认为空白字符不是一个有效字符,空白字符:空格,tab、换行等都为空白字符,讨论这个比较多了,涉及字符集的问题了,现记住不仅仅是空格。对比源码:

/** 字符串不为空即可,不关心字符内容 */
public static boolean isEmpty(CharSequence cs) {
        return cs == null || cs.length() == 0;
    }
/** 字符串不为空同时,字符不为空白字符,空白字符包含空格、tab、换行等。*/
public static boolean isBlank(CharSequence cs) {
        int strLen;
        if (cs == null || (strLen = cs.length()) == 0) {
            return true;
        }
        for (int i = 0; i < strLen; i++) {
            if (Character.isWhitespace(cs.charAt(i)) == false) {
                return false;
            }
        }
        return true;
    }

        trim(),trimToNull(),trimToEmpty()三个trim方法只是在对trim()结果进行了不同的转义,trimToNull()讲emtpy字符串转换为null,trimToEmpty()讲null转换为empty字符串。

  trim() trimToNull() trimToEmpty()
null null null “”
“” “” null “”
“  “ “” null “”
“abc” “abc” “abc” “abc”
“  abc  “ “abc” “abc” “abc”

        strip(String str,String stripChars)方法,从左右两端移除指定字符,移除规则是:从最左侧开始,取出str中的一个字符chartTmp,当chartTmp是stripChars的字符时,取下一个字符匹配,否则结束匹配;最后将匹配到的字符删除。当stripChars为null时,等同于trim方法。

         stripAll()方法允许批量修改字符串。此外还有一个stripAccent(String input) 方法,作用是移除输入字符串中的java特殊字符。此方法应该和平台有关,源码中的:

StringUtils.stripAccents("&eacute;clair")     = "eclair"
//local java 7 64bit
StringUtils.stripAccents("&eacute;clair")     = “&eacute;clair”
StringUtils.containsWhitespace(CharSequence seq) 用来判断目的字符串中是否含有空白字符,关键API为:
Character.isWhitespace(seq.charAt(i)) // 判断一个字符是否为空白字符

StringUtils.indexOfAny(CharSequence cs, char... searchChars) 用于判断目标字符串是否具有任意的searchar,在目标字符串中匹配到最左侧的任意一个待搜索字符,返回其位置。

 

StringUtils.substringBefore(String str, String separator) ,  StringUtils.substringAfter(String str, String separator) 截取分隔符之前、之后的字符串。


未完待续

posted @ 2014-11-13 23:41  龙城飞将军  阅读(1322)  评论(0编辑  收藏  举报