StringUtils工具类常用方法汇总

       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(""); // true
    StringUtils.isBlank(" "); // true
    StringUtils.isBlank("     "); // true
    StringUtils.isBlank("\t"); // true
    StringUtils.isBlank("\r"); // true
    StringUtils.isBlank("\n"); // true
    StringUtils.isBlank(null); // true
 
    StringUtils.isEmpty(""); // true
    StringUtils.isEmpty(" "); // false
    StringUtils.isEmpty("     "); // false
    StringUtils.isEmpty("\t"); // false
    StringUtils.isEmpty("\r"); // false
    StringUtils.isEmpty("\n"); // false
    StringUtils.isEmpty(null); // true
 
    StringUtils.isWhitespace(""); // true
    StringUtils.isWhitespace(" "); // true
    StringUtils.isWhitespace("    "); // true
    StringUtils.isWhitespace("\t"); // true
    StringUtils.isWhitespace("\r"); // true
    StringUtils.isWhitespace("\n"); // true
    StringUtils.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")); // false
    StringUtils.isAnyBlank("", "jack", "rose")); // true
    StringUtils.isAnyBlank(" ", "jack", "rose")); // true
    StringUtils.isAnyBlank(null, "jack", "rose")); // true
 
    StringUtils.isAnyEmpty("titanic", "jack", "rose")); // false
    StringUtils.isAnyEmpty("", "jack", "rose")); // true
    StringUtils.isAnyEmpty(" ", "jack", "rose")); // false
    StringUtils.isAnyEmpty(null, "jack", "rose")); // true
 
    StringUtils.isNoneBlank("titanic", "jack", "rose")); // true
    StringUtils.isNoneBlank("", "jack", "rose")); // false
    StringUtils.isNoneBlank(" ", "jack", "rose")); // false
    StringUtils.isNoneBlank(null, "jack", "rose")); // false
 
    StringUtils.isNoneEmpty("titanic", "jack", "rose")); // true
    StringUtils.isNoneEmpty("", "jack", "rose")); // false
    StringUtils.isNoneEmpty(" ", "jack", "rose")); // true
    StringUtils.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); // null
    StringUtils.upperCase("china"); // CHINA (全部转为大写)
    StringUtils.upperCase("china", Locale.ENGLISH); // CHINA (按照指定规则转换为大写)
    StringUtils.lowerCase(null); // null
    StringUtils.lowerCase("CHINA"); // china (全部转换为小写)
    StringUtils.lowerCase("CHINA", Locale.ENGLISH); // china (按照指定转换规则转换为小写)

(3)字符串大小写互换

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

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

    StringUtils.isAllUpperCase(null); // false
    StringUtils.isAllUpperCase(""); // false
    StringUtils.isAllUpperCase(" "); // false
    StringUtils.isAllUpperCase("CHINA"); // true
    StringUtils.isAllLowerCase(null); // false
    StringUtils.isAllLowerCase(""); // false
    StringUtils.isAllLowerCase(" "); // false
    StringUtils.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')); // chna
    StringUtils.remove("china", 'b')); // china (如果要移除的字符不存在,则返回原字符串)

(2)移除指定字符序列

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

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

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

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

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

(5)移除空白字符

    StringUtils.deleteWhitespace(null)); //null
    StringUtils.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")); // chinese
StringUtils.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')); // chinz
StringUtils.replaceChars("china", "a", "z")); // chinz

(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 (被替换和替换的个数不对应)

五、反转

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

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

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

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

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

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

六、截取

StringUtils中常用的截取字符串的方法如下:

substring(String str,int start)
substring(String str,int start, int end)
substringAfter(String str,String separator)
substringAfterLast(String str,String separator)
substringBefore(String str,String separator)
substringBeforeLast(String str,String separator)
substringBetween(String str,String tag)

需要注意的是,截取字符串时,若被截取的字符串为null或"",则截取之后的返回的字符串也为null和""

  (1)根据指定位置截取字符串,当指定的截取位置为非负数时,则从左往右开始截取,第一位为0,后面依次类推,但当索引值为负数时,则从右往左截取,注意此时右侧第一位为-1

    a)只指定了起始位置,则截取至字符串末尾:

StringUtils.substring(null, 2); // "" null和""截取后都返回null和""
StringUtils.substring(null, 2); // null
StringUtils.substring("china", 0); // china 指定的起始截取位置为0,则从第一位开始截取,也就是不截取
StringUtils.substring("china", 2); // ina 指定的截取位置为2,则从左往右第三位开始截取
StringUtils.substring("china", -2); // na 指定的截取位置为-2,则从右往左第二位开始截取

              b)指定了起始位置和结束位置,则从起始位置开始截取到结束位置(但不包含结束位置):

StringUtils.substring(null, 2, 4); // null null和""截取后都返回null和""
StringUtils.substring("", 2, 4); // ""
StringUtils.substring("china", 0, 0); // ""
StringUtils.substring("china", 2, 4); // in
StringUtils.substring("china", -2, -4); // in
StringUtils.substring("china", 2, -3); // ""
StringUtils.substring("china", 2, -1); // in

      (2)根据指定的分隔符进行截取(不包含该分隔符):
      a)从分隔符第一次出现的位置向后截取:

StringUtils.substringAfter("china", "i"); // na 从第一次出现"i"的位置向后截取,不包含第一次出现的"i"
StringUtils.substringAfter("china", "hi"); // na
StringUtils.substringAfter("chinachina","h")); // inachina
StringUtils.substringAfter("china", "a"); // ""
StringUtils.substringAfter("china", "d"); // "" 分隔符在要截取的字符串中不存在,则返回""
StringUtils.substringAfter("china", "")); // china 分隔符为"",则返回原字符串
Stringtils.substringAfter("china", null); // "" 分隔符为null,则返回""

              b)从分隔符最后一次出现的位置向后截取:

StringUtils.substringAfterLast("china", "i"); // na
StringUtils.substringAfterLast("chinachina", "i"); // na "i"最后出现的位置向后截取

              c)从分隔符第一次出现的位置向前截取:

StringUtils.substringBefore("china", "i"); // ch 
StringUtils.substringBefore("chinachina", "i"); // ch 从"i"第一次出现的位置向前截取

              d)从分隔符最后一次出现的位置向前截取:

StringUtils.substringBeforeLast("china", "i");
StringUtils.substringBeforeLast("chinachina", "i"); // chinach

           e)截取指定标记字符串之间的字符序列:

StringUtils.substringBetween(null, "ch") // null
StringUtils.substringBetween("", "") // ""
StringUtils.substringBetween("tagabctag", "") // "" 标记字符串为"",则截取后返回""
StringUtils.substringBetween("", "tag") // null // 注意此处返回的是null
StringUtils.substringBetween("tagabctag", null) // null 标记字符串为null,则截取后返回null
StringUtils.substringBetween("tagabctag", "tag") // "abc"

七、去除空白:

     去除字符串中的空白符是我们在处理字符串时经常遇到的问题,StringUtils中也封装了一些非常好用的方法来帮助我们解决这个问题:

trim(String str)
trimToEmpty(String str)
trimToNull(String str)
strip(String str)
stripToEmpty(String str)
stripToNull(String str)
deleteWhitespace(String str)

(1)去除字符串首尾的控制符(char ≤ 32)
    a)trim(String str):如果被去除的字符串的为null或"",则返回null和"":

StringUtils.trim(null); // null
StringUtils.trim(""); // ""
StringUtils.trim("     ");// ""
StringUtils.trim("abc"); // abc
StringUtils.trim("    abc    "); // abc
StringUtils.trim(" a b c "); // "a b c" 注意此处字符串内部的控制符是不去除的

            b)trimToEmpty(String str):如果被去除的字符串的为null或"",则都返回"":

StringUtils.trimToEmpty(null); // "" 此处返回的是""
StringUtils.trimToEmpty(""); // ""
StringUtils.trimToEmpty("     ");// ""
StringUtils.trimToEmpty("abc"); // abc
StringUtils.trimToEmpty("    abc    "); // abc
StringUtils.trimToEmpty(" a b c "); // a b c

           c)trimToNull(String str):如果被去除的字符串的为null或"",则都返回null:

StringUtils.trimToNull(null); // null
StringUtils.trimToNull(""); // null
StringUtils.trimToNull("     ");// null
StringUtils.trimToNull("abc"); // abc
StringUtils.trimToNull(" \t\r\nabc    "); // abc
StringUtils.trimToNull(" a b c "); // "a b c" 

(2)去除字符串中所有的空白符

StringUtils.deleteWhitespace(null); // null
StringUtils.deleteWhitespace(""); // ""
StringUtils.deleteWhitespace("abc"); // "abc"
StringUtils.deleteWhitespace("   ab  c  "); // "abc"

 

参考文章:https://blog.csdn.net/weixin_37380784/article/details/81019036

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值