设为首页 收藏本站
查看: 922|回复: 0

[经验分享] apache commons StringUtils介绍

[复制链接]

尚未签到

发表于 2017-1-1 10:51:35 | 显示全部楼层 |阅读模式
apache commons StringUtils介绍
org.apache.commons.lang.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方法了,为何我们还需要一个第三方的实现呢?
这个问题很好,让我们来看看下面这些代码,看看有何问题?
public void doStuffWithString(String stringParam) {
if(stringParam.equals("MyStringValue")) {
// do stuff }
}

这个可能有NullPointerException出现,那么有几个办法处理:
public void safeDoStuffWithString1(String stringParam) {
if(stringParam != null &&
stringParam.equals("MyStringValue")) {
// do stuff
}
}  
public void safeDoStuffWithString2(String stringParm) {
if("MyStringValue".equals(stringParam))
{
// do stuff
}
}

我本人不喜欢上面的两个方法,第一个看起来太臃肿,第二个看起来像错误的。这里我们就可以用一些StringUtils类了,这个类提供的equals方法是空指针安全的,不用担心传递给他的是什么参数,他不会抛出空指针异常,这样写:
public void safeDoStuffWithString3(String stringParam) {
if(StringUtils.equals(stringParam,"MyStringValue))
{
// do stuff
}
}

这个是我个人的喜好,但是这个确实看起来比较简单易读。前面的两个方法虽然么有什么问题,但是我想StringUtils.equals还是值得考虑的。
2)isEmpty,isNotEmpty,isBlank,isNotBlank
和前面一样,这些方法相对于jdk提供的isEmpty方法来说,多了一个“空指针安全”,即不用考虑传递参数的空值问题,让我们来看一个例子:
if(myString != null && !myString.isEmpty()) {
// 有点臃肿是把?
// Do stuff with myString
}
if(StringUtils.isNotEmpty(myString)) { // 好多了吧
// Do stuff with myString
}

Blank和empty的区别
isBlank将在字符串含有空白字符的时候,返回true,例如:
String someWhiteSpace = " \t \n";
StringUtils.isEmpty(someWhiteSpace); // false
StringUtils.isBlank(someWhiteSpace); // true

3)public static String[] split(String str,String separatorChars)
当然,这个方法相对于String.split也是空指针安全的,当你尝试split一个null字符串的时候,将返回Null,一个Null的分隔符将按照空白字符分隔字符串,但是,还有一个理由让你可考虑使用StringUtils.split()方法,就是jdk自带的String.split由于支持正则表达式进行分隔,所以可能带来意想不到的后果,例如:
public void possiblyNotWhatYouWant() {
String contrivedExampleString = "one.two.three.four";
String[] result = contrivedExampleString.split(".");
System.out.println(result.length); // 0
}
上面很明显你希望按照.分隔,但是jdk理解的“.”是正则表达式的任意字符,导致字符串内任意字符都匹配,返回一个size=0的字符串数组。其实你只要传递"\\."就行了,但是这个确实是一个问题。  
这样,使用StringUtils.split就简单多了,另外,我测试还发现StringUtils.split比jdk自带的split要快四倍。
4)public static String join(Iterable iterable,String separator)
这个方法确实很实用,因为jdk自身没有提供,简单使用方法:
String[] numbers = {"one", "two", "three"};
StringUtils.join(numbers,","); // returns "one,two,three"

当然你可以传递一个数字或者迭代序列iterators.
好了,我确信,这个库确实是一个比较实用的库,推荐大家使用。
API请参考:http://commons.apache.org/lang/api-3.1/org/apache/commons/lang3/StringUtils.html

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-322368-1-1.html 上篇帖子: Freebsd+Apache+Subversion+Trac 下篇帖子: apache重写相关整理如下
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表