Apache commons lang3 包下的 StringUtils 工具类中封装了一些字符串操作的方法,非常实用,使用起来也非常方便。最近自己也经常在项目中使用到了里面的一些方法,在这里将常用的方法总结了一下,方便以后查阅,大家有兴趣也可以看一下。

首先需要说明的一点是,StringUtils 类在操作字符串时,即使操作的为 null 值也是安全的,不会报 NullPointerException,这一点在后面的例子中再具体说明。因此,在操作字符串时使用 StringUtils 相比使用原生的 String 会更加安全。

一、判空(这应该是最常用的)###

StringUtils 中判断字符串是否为空的方法主要有以下几个:

 1)boolean StringUtils.isBlank(String str)2)boolean StringUtils.isEmpty(String str)         3)boolean StringUtils.isNotBlank(String str)4)boolean StringUtils.isNotEmpty(String str)5)boolean StringUtils.isAnyBlank(CharSequence… css)6)boolean StringUtils.isAnyEmpty(CharSequence… css)7)boolean StringUtils.isNoneBlank(CharSequence… css)8)boolean StringUtils.isNoneEmpty(CharSequence… css)9)boolean StringUtils.isWhitespace(CharSequence cs)

很显然上面的方法很多都是是非的关系,isBlank 与 isNotBlank,isEmpty 与 isNotEmpty,isAnyBlank 与 isNoneBlank,isAnyEmpty 与 isNoneEmpty 都是如此。

但是 blank 与 empty 以及 whitesapce 它们之间有何区别呢?看下面的对比就很清楚了:

    StringUtils.isBlank(""); // trueStringUtils.isBlank(" "); // trueStringUtils.isBlank("     "); // trueStringUtils.isBlank("\t"); // trueStringUtils.isBlank("\r"); // trueStringUtils.isBlank("\n"); // trueStringUtils.isBlank(null); // trueStringUtils.isEmpty(""); // trueStringUtils.isEmpty(" "); // falseStringUtils.isEmpty("     "); // falseStringUtils.isEmpty("\t"); // falseStringUtils.isEmpty("\r"); // falseStringUtils.isEmpty("\n"); // falseStringUtils.isEmpty(null); // trueStringUtils.isWhitespace(""); // trueStringUtils.isWhitespace(" "); // trueStringUtils.isWhitespace("    "); // trueStringUtils.isWhitespace("\t"); // trueStringUtils.isWhitespace("\r"); // trueStringUtils.isWhitespace("\n"); // trueStringUtils.isWhitespace(null); // false

从上面的结果可以看出,
blank:代表的是空串 (“”)、空白符(空格"“,”“,制表符”\t",回车符"\r",“\n” 等) 以及 null 值;
empty:代表的是空串 (“”) 和 null 值,不包含空白符;
whitespace:包含空串 (“”) 和空白符,不包含 null 值.

isBlank,isNotBlank,isEmpty,isNotEmpty 四个方法都是用于判断单个字符串是否为空,这个可以参见上面的几个例子。

isAnyBlank,isNoneBlank,isAnyEmpty,isNoneEmpty 四个方法是用于判断多个字符串是否为空;
  对于 isAnyBlank 和 isAnyEmpty 来说,只要有一个字符串为空,结果即为 true;
对于 isNoneBlank 和 isNoneEmpty,只要存在一个字符串为空,结果即为 false,具体参见下面的例子:

    StringUtils.isAnyBlank("titanic", "jack", "rose")); // falseStringUtils.isAnyBlank("", "jack", "rose")); // trueStringUtils.isAnyBlank(" ", "jack", "rose")); // trueStringUtils.isAnyBlank(null, "jack", "rose")); // trueStringUtils.isAnyEmpty("titanic", "jack", "rose")); // falseStringUtils.isAnyEmpty("", "jack", "rose")); // trueStringUtils.isAnyEmpty(" ", "jack", "rose")); // falseStringUtils.isAnyEmpty(null, "jack", "rose")); // trueStringUtils.isNoneBlank("titanic", "jack", "rose")); // trueStringUtils.isNoneBlank("", "jack", "rose")); // falseStringUtils.isNoneBlank(" ", "jack", "rose")); // falseStringUtils.isNoneBlank(null, "jack", "rose")); // falseStringUtils.isNoneEmpty("titanic", "jack", "rose")); // trueStringUtils.isNoneEmpty("", "jack", "rose")); // falseStringUtils.isNoneEmpty(" ", "jack", "rose")); // trueStringUtils.isNoneEmpty(null, "jack", "rose")); // false

二、转换

StringUtils 中涉及大小写转换以及判断字符串大小写的方法如下:

    1)StringUtils.capitalize(String str)2)StringUtils.uncapitalize(String str)3)StringUtils.upperCase(String str)4)StringUtils.upperCase(String str,Locale locale)5)StringUtils.lowerCase(String str)6)StringUtils.lowerCase(String str,Locale locale)7)StringUtils.swapCase(String str)8)StringUtils.isAllUpperCase(CharSequence cs)9)StringUtils.isAllLowerCase(CharSequence cs)

(1)字符串首字母大小写转换

 StringUtils.capitalize(null)); // null (注意此处不会报异常)StringUtils.capitalize("china")); // China (首字母转大写)StringUtils.uncapitalize(null)); // null  StringUtils.uncapitalize("CHINA")); // cHINA (首字母转小写)

(2)字符串整体大小写转换

    StringUtils.upperCase(null)); // nullStringUtils.upperCase("china")); // CHINA (全部转为大写)StringUtils.upperCase("china", Locale.ENGLISH)); // CHINA (按照指定规则转换为大写)StringUtils.lowerCase(null)); // nullStringUtils.lowerCase("CHINA")); // china (全部转换为小写)StringUtils.lowerCase("CHINA", Locale.ENGLISH)); // china (按照指定转换规则转换为小写)

(3)字符串大小写互换

    StringUtils.swapCase(null)); // nullStringUtils.swapCase("chINA")); // CHina

(4)判断字符串是否全部是大写或小写 (空或空白符均为 false)

    StringUtils.isAllUpperCase(null)); // falseStringUtils.isAllUpperCase("")); // falseStringUtils.isAllUpperCase(" ")); // falseStringUtils.isAllUpperCase("CHINA")); // trueStringUtils.isAllLowerCase(null)); // falseStringUtils.isAllLowerCase("")); // falseStringUtils.isAllLowerCase(" ")); // falseStringUtils.isAllLowerCase("china")); // true

三、移除

从字符串中移除匹配的字符或字符序列,如果要移除的字符或字符序列在字符串中不存在,即无匹配,则不进行移除

 1)StringUtils.remove(String str, char remove)2)StringUtils.remove(String str, String remove)3)StringUtils.removeStart(String str, String remove)4)StringUtils.removeStartIgnoreCase(String str, String remove)5)StringUtils.removeEnd(String str, String remove)6)StringUtils.removeEndIgnoreCase(String str, String remove)7)StringUtils.deleteWhitespace(String str)

(1)移除单个字符

 StringUtils.remove(null, 'a')); // null (注意此处及下一行为null)StringUtils.remove('china', null) // china StringUtils.remove("china", 'i')); // chnaStringUtils.remove("china", 'b')); // china (如果要移除的字符不存在,则返回原字符串)

(2)移除指定字符序列

 StringUtils.remove("china", "in")); // chaStringUtils.remove("china", "nin")); // china

(3)移除开头匹配的字符序列

 StringUtils.removeStart("china", "ch")); // inaStringUtils.removeStartIgnoreCase("china", "CHI")); // na (忽略大小写)

(4)移除结尾匹配的字符序列

 StringUtils.removeEnd("china", "na")); // chiStringUtils.removeEndIgnoreCase("china", "NA")); // chi (忽略大小写)

(5)移除空白字符

 StringUtils.deleteWhitespace(null)); //nullStringUtils.deleteWhitespace(" c h  i\tn\ra")); // china

四、替换

StringUtils 中常用的替换方法有如下几种

 1)replace(String text, String searchString, String replacement)2)replace(String text, String searchString, String replacement, int max)3)replaceChars(String str, char searchChar, char replaceChar)4)replaceChars(String str, String searchChars, String replaceChars)5)replaceOnce(String text, String searchString, String replacement)6)overlay(String str,String overlay,int start,int end)7)replaceEach(String text, String[] searchList, String[] replacementList)8)replaceEachRepeatedly(String text, String[] searchList, String[]replacementList)

需要注意的是,若被替换的字符串为 null,或者被替换的字符或字符序列为 null,又或者替换的字符或字符序列为 null,那么此次替换都会被忽略,返回原字符串

(1)替换单个字符或字符序列

(a)replace 方法
      replace 方法可以替换单个字符序列

     StringUtils.replace("china", null, "z")); // china (此处被替换字符序列为null,因此替换会被忽略,返回原字符串)StringUtils.replace("china", "c", null)); // china (此处替换字符序列为null,因此替换也被忽略,返回原字符串)StringUtils.replace("china", "a", "ese")); // chineseStringUtils.replace("china", "a", "")); // chin

replace 方法还可以指定最大替换的个数

     StringUtils.replace("aabaaa", "a", "z", 0)); // aabaaa (0表示替换的个数为0,也就是不替换)StringUtils.replace("aabaaa", "a", "z", 1)); // zabaaa (1表示最多替换1个)StringUtils.replace("aabaaa", "a", "z", 2)); // zzbaaa (2表示最多替换2个)StringUtils.replace("aabaaa", "a", "z", 3)); // zzbzaa (3表示最多替换3个)StringUtils.replace("aabaaa", "a", "z", -1)); // zzbzaa (-1表示全部替换)

(b)replaceChars 方法
      replaceChars 方法可以替换单个字符或者单个字符序列

     StringUtils.replaceChars("china", 'a', 'z')); // chinzStringUtils.replaceChars("china", "a", "z")); // chinz

(c)replaceOnce 方法
      replaceOnce 方法只会替换一次,也就是只会替换第一个要替换的字符序列,后面即使有匹配的字符序列也不会被替换

     StringUtils.replaceOnce("abaa", "a", "z")); // zbaa

(d)overlay 方法
      overlay(String str,String overlay,int start,int end)方法可以在指定位置进行字符序列替换,从 start 索引处开始 (包含) 到 end-1 索引处为止进行替换

         StringUtils.overlay("abcdef", "zzzz", 2, 4)); // abzzzzef

这里有一些特殊情况:
      1)起始索引 start 小于结束索引 end,这时会将 end 作为起始索引,start 作为结束索引

         StringUtils.overlay("abcdef", "zzzz", 4, 2)); // abzzzzefStringUtils.overlay("abcdef", "zzzz", 4, 3)); // abczzzzefStringUtils.overlay("abcdef", "zzzz", 4, 4)); // abcdzzzzefStringUtils.overlay("abcdef", "zzzz", 4, 5)); // abcdzzzzf

2)起始索引 start 为负数,这时 start 会被当作 0 处理

         StringUtils.overlay("abcdef", "zzzz", -1, 2)); // abcdzzStringUtils.overlay("abcdef", "zzzz", -2, -3)); // zzzzabcdef

3)结束索引 end 大于原始字符串的长度,这时 end 会被当作原始字符串长度处理

         StringUtils.overlay("abcdef", "zzzz", 8, 10)); // abcdefzzzz

(2)同时替换多个字符序列

(a)replaceEach 方法
      replaceEach(String text, String[] searchList, String[] replacementList) 方法可以同时替换多个字符序列,但被替换和替换的字符序列的个数应该对应,否则会报 IllegalArgumentException

         StringUtils.replaceEach("china", new String[] { "ch", "a" }, new String[] { "x", "z" })); // xhinz (将ch和a分别替换为x和z)StringUtils.replaceEach("china", null, new String[] { "x", "z" })); // china (存在null,不进行替换)StringUtils.replaceEach("china", new String[] { "ch", "a" }, new String[] { "x", "z", "y" })); // IllegalArgumentException (被替换和替换的个数不对应)

(b)replaceEachRepeatedly 方法
      replaceEachRepeatedly(String text, String[] searchList, String[] replacementList) 方法可以循环进行替换,具体见下面的例子:

           StringUtils.replaceEachRepeatedly("china", new String[] { "c", "x" }, new String[] { "x", "z" })); // zhina (c被替换为x,x又被替换为z)

但如果替换是一个死循环,则会报 IllegalStateException:

           StringUtils.replaceEachRepeatedly("china", new String[] { "c", "x" }, new String[] { "x", "c" })); // IllegalStateException (c被替换为x,x又被替换为c)

五、反转

StringUtils 中有关反转的方法如下:

 1)reverse(String str)2)reverseDelimited(String str, char separatorChar)

(1)简单反转
  reverse(String str) 方法

    StringUtils.reverse("china")); // anihc

(2)根据指定分隔符进行反转,分隔符之间的字符不进行反转

    StringUtils.reverseDelimited("china", ',')); // chinaStringUtils.reverseDelimited("cxhinxa", 'x')); // axhinxzStringUtils.reverseDelimited("c.hin.a", '.')); // a.hin.cStringUtils.reverseDelimited("c.hina", '.')); // hina.c

StringUtils 工具类常用方法汇总 1(判空、转换、移除、替换、反转)相关推荐

  1. StringUtils工具类常用方法

    StringUtils类在操作字符串是安全的,不会报空指针异常,也正因此,在操作字符串时使用StringUtils相比使用原生的String会更加安全. 一.判空 StringUtils提供常用的判断 ...

  2. Apache commons lang3 StringUtils工具类

    Apache commons lang3 StringUtils工具类 Apache commons lang3包下的StringUtils工具类中封装了一些字符串操作的方法,非常实用,使用起来也非常 ...

  3. Apache Commons包 StringUtils工具类深入整理(转载)

    [转载地址]:cnblogs.com/sealy321/p/10227131.html 字符串是在程序开发中最常见的,Apache Commons开源项目在org.apache.commons.lan ...

  4. Apache Commons StringUtils工具类深入整理

    字符串是在程序开发中最常见的,Apache Commons开源项目在org.apache.commons.lang3包下提供了StringUtils工具类,该类相当于是对jdk自带的String类的增 ...

  5. 利用StringUtils工具类进行String为空的判断

      利用工具类进行String类型数据的非空判断,让自己的项目代码变得更加的简洁明了. 判断某字符串是否为空,为空的标准是 str==null 或 str.length()==0 下面是 String ...

  6. Java实用类,包装类,日历类,日期类等工具类常用方法

    文章目录 第二章-实用类 1.枚举类型 2.包装类 3.包装类的常用方法 4.包装类的自动装箱和拆箱 5.String类 6.StringBuffer对象 String,StringBuffer,St ...

  7. 学习StringUtils工具类

    在JAVA中我们用的最多的类应该就是String了.对于String的处理说简单也简单,但是有的时候要自己去实现一些功能还是要浪费一点时间的.一年之前接触了StringUtils这个工具类,就猛然爱上 ...

  8. StringUtils工具类用法

    1.截取 StingUtils常用的截取字符串的方法: String substring(String str,int start):避免异常地从指定的String获取一个子字符串. String s ...

  9. hbw-utils - guava基本数据类型工具类常用方法的整理

    世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程. 正如标题第一个字段所写,我正在致力于开发一款全新的工具类.工具类应该是程序中最最基础.最最稳定的类,所以要开发有 ...

最新文章

  1. 大数据时代,如何根据业务选择合适的分布式框架
  2. python opencv 中bmp转raw格式图片并展示
  3. corosync+pacemaker+drbd构建mysql高可用平台的简单案例
  4. python条码识别
  5. php表单数量,php – 解析具有未知数量字段的表单
  6. Kafka 设计架构原理详细解析(超详细图解)
  7. 异步 HttpContext.Current实现取值的方法(解决异步Application,Session,Cache...等失效的问题)...
  8. clover java,clover-clover软件 v3.4.3 官方版
  9. mysql参数优化步骤_MySQL架构优化实战系列4:SQL优化步骤与常用管理命令2(转)
  10. 深度学习代码实战——基于RNN的手写数字分类
  11. 【证明】两个自变量的二阶线性方程经过可逆变换后方程的类型不会改变
  12. 大数据技术原理与应用(一):大数据概述
  13. 求最长公共子串,简单易懂
  14. Mac电池系统管理软件App Tamer好用吗?
  15. 四层PCB核心板制作6——BGA引脚扇出与电路扇孔
  16. 搞 Java 的年薪 40W 是什么水平?
  17. 计算机硬件故障智能检测软件,电脑硬件故障检测方法和检测工具推荐
  18. Android开发技术前线 (android-tech-frontier) --优质技术文章的聚合项目
  19. 代理的理解(动态代理与静态代理)
  20. Altium Designer 14.1.5 Build 30772

热门文章

  1. Docker网络---容器互联
  2. 做数据时代的加油站,ShardingSphere 为易车数据库架构演进提供新动力
  3. OpenGL深入探索——使用Assimp加载模型
  4. 8255A的应用举例
  5. 多个随机变量运算后的均值与方差计算
  6. debian安装sqlserver_在ubuntu16.04(虚拟机)上安装SQLSERVER
  7. java设计拟应用的文献综述_基于Java的超市系统设计与实现文献综述论文.docx
  8. 基于PLC的备用电源自动投入系统设计
  9. 当下互联网求职环境越来越差,作为初出茅庐的程序员感觉已凉,大厂面试成了炮灰...
  10. 来刷剧吧!这是一份专为程序员准备的剧集