Apache commons lang3 StringUtils工具类

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

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

一、判空

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

boolean StringUtils.isBlank(String str)
boolean StringUtils.isEmpty(String str)
boolean StringUtils.isNotBlank(String str)
boolean StringUtils.isNotEmpty(String str)
boolean StringUtils.isAnyBlank(CharSequence… css)
boolean StringUtils.isAnyEmpty(CharSequence… css)
boolean StringUtils.isNoneBlank(CharSequence… css)
boolean StringUtils.isNoneEmpty(CharSequence… css)
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中涉及大小写转换以及判断字符串大小写的方法如下:

StringUtils.capitalize(String str)
StringUtils.uncapitalize(String str)
StringUtils.upperCase(String str)
StringUtils.upperCase(String str,Locale locale)
StringUtils.lowerCase(String str)
StringUtils.lowerCase(String str,Locale locale)
StringUtils.swapCase(String str)
StringUtils.isAllUpperCase(CharSequence cs)
StringUtils.isAllLowerCase(CharSequence cs)
  • 字符串首字母大小写转换
    StringUtils.capitalize(null)); // null (注意此处不会报异常)StringUtils.capitalize("china")); // China (首字母转大写)StringUtils.uncapitalize(null)); // null  StringUtils.uncapitalize("CHINA")); // cHINA (首字母转小写)
  • 字符串整体大小写转换
    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 (按照指定转换规则转换为小写)
  • 字符串大小写互换
    StringUtils.swapCase(null)); // nullStringUtils.swapCase("chINA")); // CHina
  • 判断字符串是否全部是大写或小写(空或空白符均为false)
    StringUtils.isAllUpperCase(null)); // falseStringUtils.isAllUpperCase("")); // falseStringUtils.isAllUpperCase(" ")); // falseStringUtils.isAllUpperCase("CHINA")); // trueStringUtils.isAllLowerCase(null)); // falseStringUtils.isAllLowerCase("")); // falseStringUtils.isAllLowerCase(" ")); // falseStringUtils.isAllLowerCase("china")); // true

三、移除

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

StringUtils.remove(String str, char remove)
StringUtils.remove(String str, String remove)
StringUtils.removeStart(String str, String remove)
StringUtils.removeStartIgnoreCase(String str, String remove)
StringUtils.removeEnd(String str, String remove)
StringUtils.removeEndIgnoreCase(String str, String remove)
StringUtils.deleteWhitespace(String str)
  • 移除单个字符
    StringUtils.remove(null, 'a')); // null (注意此处及下一行为null)StringUtils.remove('china', null) // china StringUtils.remove("china", 'i')); // chnaStringUtils.remove("china", 'b')); // china (如果要移除的字符不存在,则返回原字符串)
  • 移除指定字符序列
 StringUtils.remove("china", "in")); // chaStringUtils.remove("china", "nin")); // china
  • 移除开头匹配的字符序列
 StringUtils.removeStart("china", "ch")); // inaStringUtils.removeStartIgnoreCase("china", "CHI")); // na (忽略大小写)
  • 移除结尾匹配的字符序列
 StringUtils.removeEnd("china", "na")); // chiStringUtils.removeEndIgnoreCase("china", "NA")); // chi (忽略大小写)
  • 移除空白字符
 StringUtils.deleteWhitespace(null)); //nullStringUtils.deleteWhitespace(" c h  i\tn\ra")); // china

四、替换

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

replace(String text, String searchString, String replacement)
replace(String text, String searchString, String replacement, int max)
replaceChars(String str, char searchChar, char replaceChar)
replaceChars(String str, String searchChars, String replaceChars)
replaceOnce(String text, String searchString, String replacement)
overlay(String str,String overlay,int start,int end)
replaceEach(String text, String[] searchList, String[] replacementList)
replaceEachRepeatedly(String text, String[] searchList, String[]replacementList)

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

1)替换单个字符串

  • 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表示全部替换)
  • replaceChars方法
    replaceChars方法可以替换单个字符或者单个字符序列
 StringUtils.replaceChars("china", 'a', 'z')); // chinzStringUtils.replaceChars("china", "a", "z")); // chinz
  • replaceOnce方法
    replaceOnce方法只会替换一次,也就是只会替换第一个要替换的字符序列,后面即使有匹配的字符序列也不会被替换
StringUtils.replaceOnce("abaa", "a", "z")); // zbaa
  • overlay方法
    overlay(String str,String overlay,int start,int end)方法可以在指定位置进行字符序列替换,从start索引处开始(包含)到end-1索引处为止进行替换
 StringUtils.overlay("abcdef", "zzzz", 2, 4)); // abzzzzef
这里有一些特殊情况:
起始索引start小于结束索引end,这时会将end作为起始索引,start作为结束索引
```java
StringUtils.overlay("abcdef", "zzzz", 4, 2)); // abzzzzef
StringUtils.overlay("abcdef", "zzzz", 4, 3)); // abczzzzef
StringUtils.overlay("abcdef", "zzzz", 4, 4)); // abcdzzzzef
StringUtils.overlay("abcdef", "zzzz", 4, 5)); // abcdzzzzf
```起始索引start为负数,这时start会被当作0处理
```java
StringUtils.overlay("abcdef", "zzzz", -1, 2)); // abcdzz
StringUtils.overlay("abcdef", "zzzz", -2, -3)); // zzzzabcdef
```结束索引end大于原始字符串的长度,这时end会被当作原始字符串长度处理
```java
StringUtils.overlay("abcdef", "zzzz", 8, 10)); // abcdefzzzz
```

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

  • 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 (被替换和替换的个数不对应)
  • 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中有关反转的方法如下:

reverse(String str)
reverseDelimited(String str, char separatorChar)
  • 简单反转
    reverse(String str)方法
StringUtils.reverse("china")); // anihc
  • 根据指定分隔符进行反转,分隔符之间的字符不进行反转
StringUtils.reverseDelimited("china", ',')); // china
StringUtils.reverseDelimited("cxhinxa", 'x')); // axhinxz
StringUtils.reverseDelimited("c.hin.a", '.')); // a.hin.c
StringUtils.reverseDelimited("c.hina", '.')); // hina.c

Apache commons lang3 StringUtils工具类相关推荐

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

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

  2. Java中字符串工具类继承org.apache.commons.lang3.StringUtils类代码

    场景 转换为字节数组:是否包含字符串:替换掉HTML标签方法:替换为手机识别的HTML,去掉样式及属性,保留回车: 缩略字符串(不区分中英文字符):转换为Double类型:转换为Float类型:转换为 ...

  3. 工具类org.apache.commons.lang3.StringUtils

    sEmpty 和 isBlank 的区别你知道吗?也许你除了isEmpty/isNotEmpty/isNotBlank/isBlank外,并不知道还有isAnyEmpty/isNoneEmpty/is ...

  4. java的StringUtils.isBlank和StringUtils.isEmpty方法区别(org.apache.commons.lang3.StringUtils)

    前言 估计很多朋友跟我一样,平时也不会特别去注意究竟用isBlank还是isEmpty去判断空字符串,但是大部分场景优先使用isBlank就对了. isEmpty是否为空,只有当==null或者==& ...

  5. org.apache.commons.lang3.StringUtils 的相关用法

    一.jar包下载 commons-lang3-3.1.jar java 开发工具commons-lang3-3.0 jar包,有org.apache.commons.lang3.StringUtils ...

  6. 错误: java.lang.ClassNotFoundException: org.apache.commons.lang3.StringUtils

    做项目的时候,实现图片异步上传并返回json数据,但是图片上传成功,json数据没有返回,报错:  java.lang.ClassNotFoundException: org.apache.commo ...

  7. Java的org.apache.commons.lang3.StringUtils

    Java的org.apache.commons.lang3.StringUtils 1.用途 StringUtils提供了对String 类型的常用操作方法(如判空等).StringUtils中的方法 ...

  8. hive执行drop卡死一例:java.lang.NoSuchMethodError: org.apache.commons.lang3.StringUtils.isAnyBlank

    环境: 组件 版本 Hadoop 3.1.2 Hive 2.3.4 故障复现操作: hive中尝试drop table卡死,然后去hadoop的yarn界面发现如下报错 完整报错: org.apach ...

  9. Java基础学习总结(125)——org.apache.commons.lang3.StringUtils类方法详解

    org.apache.commons.lang3.StringUtils中方法的操作对象是java.lang.String类型的对象,是JDK提供的String类型操作方法的补充,并且是null安全的 ...

最新文章

  1. 微软低调发布 Web 版本的 Visual Studio Code 预览
  2. 关于ajax访问本地json文件报错404的问题
  3. 【SeeMusic】购买付费版本 ( 进入购买页面 | 购买流程 )
  4. 多商户商城源码_如何利用多商户B2B2C多商户商城系统后台组件玩转商城?
  5. VTK:网格质量用法实战
  6. 论文阅读 R-FCN: Object Detection via Region-based Fully Convolutional Networks
  7. python 表格处理软件_基于Python的Excel处理工具
  8. 1、流程控制语句switch 2、数组 3、随机点名器案例
  9. Magento url 问题
  10. (CVPR_2021) Center-based 3D Object Detection and Tracking
  11. 用java做一个简易的五子棋
  12. C语言:输入一个三位数,反向输出该三位数
  13. 矩阵相乘取共轭_共轭矩阵
  14. pip安装pytorch清华_镜像安装pytorch的简便方法总结
  15. vim---操作命令大全
  16. 腾讯视频下载的视频怎么导出来_手机腾讯视频怎么缓存视频电影
  17. 使用计算机录制声音10,Win10怎么录制电脑内部声音 Win10电脑自身录音教程
  18. caffe-ristretto:定点方案
  19. centos 日志文件
  20. 如何防止自己的电脑成为肉鸡?

热门文章

  1. 小米wifi智能家居android,小米智能家居
  2. 离服务器很近就是没有wifi信号为什么,卧室没有wifi信号怎么办
  3. 让你成功安装vscode中go的相关插件
  4. 弱电系统标准CAD图例识图讲解
  5. img背景图片灰色框问题
  6. Android点击链接进入应用市场下载
  7. UED的设计流程:原型,模型,demo
  8. 引用sun.management.ManagementFactory出错的解决办法
  9. android studio manifestplaceholders,Android Studio - 第四十五期 Gradle manifestPlaceholders
  10. mmCIF 文件格式