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.containsWhitespace(CharSequence seq) 用来判断目的字符串中是否含有空白字符,关键API为:StringUtils.stripAccents("éclair") = "eclair" //local java 7 64bit StringUtils.stripAccents("éclair") = “éclair”Character.isWhitespace(seq.charAt(i)) // 判断一个字符是否为空白字符StringUtils.indexOfAny(CharSequence cs, char... searchChars) 用于判断目标字符串是否具有任意的searchar,在目标字符串中匹配到最左侧的任意一个待搜索字符,返回其位置。
StringUtils.substringBefore(String str, String separator) , StringUtils.substringAfter(String str, String separator) 截取分隔符之前、之后的字符串。
未完待续