StringUtils在commons-lang3和commons-lang中的区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了StringUtils在commons-lang3和commons-lang中的区别相关的知识,希望对你有一定的参考价值。
参考技术A (1)入参类型不同
commons.lang中入参为 Sring str
commons.lang3中入参为 CharSequence cs(适用范围更广)
(2)入参数量不同
commons.lang3中支持多入参
最近经常需要对String做一些判断和处理,于是就用到了Apache提供的StringUtils这个工具类,用的时候发现有两个不同的版本,一个版本位于org.apache.commons.lang下面,另一个则位于org.apache.commons.lang3下面。
查了一下资料,lang3是Apache Commons 团队发布的工具包,要求jdk版本在1.5以上,相对于lang来说完全支持java5的特性,废除了一些旧的API。该版本无法兼容旧有版本,于是为了避免冲突改名为lang3。这些东西就不再细说了,我们来看看StringUtils中常用的一些方法有什么改变吧。
可以看到这几个方法逻辑毫无变化,只是参数类型变了,由String变为CharSequence。那么这个CharSequence是什么呢?我们看看它的源码:
CharSequence是一个字符序列的接口,其中定义了一些常用的如length()、subSequence()等方法,String也实现了这个接口。当然大家可能在String里用到的都是subString(),实际上String也实现了subSequence()这个方法,只是直接指向了subString()。
lang3中使用CharSequence最大的好处就是令这些方法用处更加广泛,不止局限于String,其他一些实现了该接口的类也可以使用StringUtils中的这些方法去进行一些操作。另外我发现很多nio中的类都实现了这个接口,个人猜测可能也有为nio服务的目的。
在lang中,第一步是先判断str1是否为空,而在lang3中,第一步则是先判断两个对象是否相同。这个不难理解,如果两个对象的地址相同,那么它们指向的就是同一个对象,内容肯定相同。
在lang3中,还加入了一些同时判断多个参数的方法,可以看到实际上是将参数列表放入一个CharSequence数组中,然后遍历调用之前的isEmpty等方法。判断blank也有类似的方法。
可能有人会觉得,很多方法String本身就有啊,为什么还要用StringUtils提供的呢?抛开参数类型不谈,我们可以看到,StringUtils中的方法大多都做了空校验,如果为空时会返回Null或者空串,而String本身的方法在很多传入参数或对象本身为空的时候都会报空指针错误。
参考地址: StringUtils在commons-lang3和commons-lang中的区别
解决import org.apache.commons.lang.StringUtils问题
最近遇到了很多的问题,所以我要记录下来,记录自己的成长过程。
要在工程的lib文件夹中导入commons.lang.2.6的jar包。
下载地址:http://commons.apache.org/proper/commons-lang/download_lang.cgi
以上是关于StringUtils在commons-lang3和commons-lang中的区别的主要内容,如果未能解决你的问题,请参考以下文章
struts2的问题 java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils