org.apache.commons.lang.StringUtils

本文介绍了Apache Commons Lang库中的StringUtils工具类,重点讲解了其提供的equals、isEmpty、split、join等方法如何帮助开发者在处理字符串时避免NullPointerException、提高代码简洁性与性能。特别强调了StringUtils.equals方法的空指针安全特性及split方法在正则表达式分隔上的优势。
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方法了,为何我们还需要一个第三方的实现呢?

这个问题很好,让我们来看看下面这些代码,看看有何问题?

Java代码 
  1. public void doStuffWithString(String stringParam) {    
  2. if(stringParam.equals("MyStringValue")) {    
  3. // do stuff }    
  4. }    
这个可能有NullPointerException出现,那么有几个办法处理:

Java代码 
  1. public void safeDoStuffWithString1(String stringParam) {    
  2. if(stringParam != null &&    
  3. stringParam.equals("MyStringValue")) {    
  4. // do stuff    
  5. }    
  6. }     
  7. public void safeDoStuffWithString2(String stringParm) {    
  8. if("MyStringValue".equals(stringParam))    
  9. {    
  10. // do stuff    
  11. }    
  12. }   
我本人不喜欢上面的两个方法,第一个看起来太臃肿,第二个看起来像错误的。这里我们就可以用一些StringUtils类了,这个类提供的equals方法是空指针安全的,不用担心传递给他的是什么参数,他不会抛出空指针异常,这样写:

Java代码 
  1. public void safeDoStuffWithString3(String stringParam) {   
  2. if(StringUtils.equals(stringParam,"MyStringValue))    
  3. {    
  4. // do stuff    
  5. }    
  6. }   
这个是我个人的喜好,但是这个确实看起来比较简单易读。前面的两个方法虽然么有什么问题,但是我想StringUtils.equals还是值得考虑的。

2)isEmpty,isNotEmpty,isBlank,isNotBlank

和前面一样,这些方法相对于jdk提供的isEmpty方法来说,多了一个“空指针安全”,即不用考虑传递参数的空值问题,让我们来看一个例子:

Java代码 
  1. if(myString != null && !myString.isEmpty()) {    
  2. // 有点臃肿是把?   
  3. // Do stuff with myString    
  4. }    
  5.     
  6. if(StringUtils.isNotEmpty(myString)) { // 好多了吧   
  7. // Do stuff with myString    
  8. }   
Blank和empty的区别

isBlank将在字符串含有空白字符的时候,返回true,例如:

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

4)public static String join(Iterable iterable,String separator)
这个方法确实很实用,因为jdk自身没有提供,简单使用方法:

Java代码 
  1. String[] numbers = {"one""two""three"};   
  2. StringUtils.join(numbers,","); // returns "one,two,three"   

当然你可以传递一个数字或者迭代序列iterators.

好了,我确信,这个库确实是一个比较实用的库,推荐大家使用。
### 区别 - **版本与兼容性**:`org.apache.commons.lang.StringUtils` 是 Apache Commons Lang 早期版本中的类;`org.apache.commons.lang3.StringUtils` 是 Apache Commons Lang 3.x 版本引入的类,3.x 版本在设计上进行了许多改进,修复了早期版本的一些问题,同时增强了功能和性能,并且更符合现代 Java 编程的最佳实践。 - **功能特性**:`org.apache.commons.lang3.StringUtils` 相较于旧版本有更多的功能和优化。例如,在处理空值和空字符串时更加安全和健壮,提供了更多实用的字符串处理方法。 ### 使用方法 以下是使用 `org.apache.commons.lang3.StringUtils` 的一些常见示例: ```java import org.apache.commons.lang3.StringUtils; public class StringUtilsExample { public static void main(String[] args) { // 判断字符串是否为空 boolean isEmpty = StringUtils.isEmpty(""); System.out.println("字符串是否为空: " + isEmpty); // 去除字符串两端的空白 String trimmed = StringUtils.trim(" hello "); System.out.println("去除两端空白后的字符串: " + trimmed); // 拼接字符串 String joined = StringUtils.join(new String[]{"a", "b", "c"}, ","); System.out.println("拼接后的字符串: " + joined); } } ``` 使用 `org.apache.commons.lang.StringUtils` 的方法与之类似,只是需要替换导入的类路径。 ### 特性 #### org.apache.commons.lang3.StringUtils - **安全性**:对空值和空字符串的处理更加安全,许多方法在传入 `null` 时不会抛出 `NullPointerException`,而是返回合理的结果,如 `isEmpty(null)` 返回 `true`。 - **功能丰富**:提供了大量实用的字符串处理方法,如字符串的拼接、分割、替换、大小写转换、去除空白等。 - **性能优化**:在实现上进行了性能优化,能够更高效地处理字符串操作。 #### org.apache.commons.lang.StringUtils - **基本功能**:具备一些基本的字符串处理功能,如判断字符串是否为空、去除空白等,但功能相对较少。 - **兼容性**:在一些旧项目中可能仍在使用,以保持与旧代码的兼容性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值