字符串是一种在开发中经常使用到的数据类型,对字符串的处理也变得非常重要,字符串本身有一些方法,但都没有对null做处理,而且有时可能还需要做一些额外处理才能满足我们的需求,比如,要判断某个字符串中是否包含字符串a或者字符串ax,使用自带的字符串方法,我们可能要这么写

boolean isContains = false;
String s = "abc";
if(s != null) {
if(s.contains("a") || s.contains("ax")) {
isContains = true;
}
}

使用commons-lang3工具包,就只需要一行代码就可以,其他内容已经被封装好,并且已经对null做了处理,StringUtils类中大部分的方法都对null做了处理,所以不会出现空指针异常

boolean flag = StringUtils.containsAny("abc", new String[] {"a","ax"});

但即便如此,对于第三方jar包,也建议不要直接使用,最好自己封装一下,使用时调用自己封装的接口,这样,以后如果方法有变动,或者使用其他的jar包,也不需要每个调用都做修改,只需要修改自己封装的接口即可。不要使用已过期的方法

maven依赖如:https://www.cnblogs.com/qq931399960/p/10689571.html中所示,可以简单先看下这个类中的方法,有个印象,在对字符串做处理时,再去源码中查看具体的使用方式,每个方法在注释中都有详细的例子,使用起来很方便,比如上述containsAny方法

    /**
* <p>Checks if the CharSequence contains any of the CharSequences in the given array.</p>
*
* <p>
* A {@code null} {@code cs} CharSequence will return {@code false}. A {@code null} or zero
* length search array will return {@code false}.
* </p>
*
* <pre>
* StringUtils.containsAny(null, *) = false
* StringUtils.containsAny("", *) = false
* StringUtils.containsAny(*, null) = false
* StringUtils.containsAny(*, []) = false
* StringUtils.containsAny("abcd", "ab", null) = true
* StringUtils.containsAny("abcd", "ab", "cd") = true
* StringUtils.containsAny("abc", "d", "abc") = true
* </pre>
*
*
* @param cs The CharSequence to check, may be null
* @param searchCharSequences The array of CharSequences to search for, may be null.
* Individual CharSequences may be null as well.
* @return {@code true} if any of the search CharSequences are found, {@code false} otherwise
* @since 3.4
*/
public static boolean containsAny(final CharSequence cs, final CharSequence... searchCharSequences) {
if (isEmpty(cs) || ArrayUtils.isEmpty(searchCharSequences)) {
return false;
}
for (final CharSequence searchCharSequence : searchCharSequences) {
if (contains(cs, searchCharSequence)) {
return true;
}
}
return false;
}

下面是对StringUtils的一些简单测试

        // true,为null或者size==0,返回true
boolean empty = StringUtils.isEmpty("");
// false,与isEmpty相反
boolean notEmpty = StringUtils.isNotEmpty("");
// true,数组中有一个为null或size==0的字符串,则返回true
boolean anyEmpty = StringUtils.isAnyEmpty(new String[] { "aa", "" });
// false,全部都不为空,返回true
boolean noneEmpty = StringUtils.isNoneEmpty(new String[] { "", "aa" });
// true,全部为空,返回true
boolean allEmpty = StringUtils.isAllEmpty(new String[] { "", "" }); // true,为null或者size==0或者只存在空白字符(如" "),则返回true
boolean blank = StringUtils.isBlank(" ");
// false,与isBlank相反
boolean notBlank = StringUtils.isNotBlank(" ");
// true,数组中任何一个为null或者空字符串或者空白字符,则返回true
boolean anyBlank = StringUtils.isAnyBlank(new String[] { "dd", " " });
// false,与isAnyBlank 相反
boolean noneBlank = StringUtils.isNoneBlank(new String[] { "dd", "" });
// true,数组中的数据全部为null,或者空字符串或者空白字符,则返回true
boolean allBlank = StringUtils.isAllBlank(new String[] { "", " " }); // dd,去掉前后字符,为null,返回null
String trim = StringUtils.trim(" dd ");
// "",为null或者size==0,则返回空字符串
String trimToEmpty = StringUtils.trimToEmpty(" ");
// null,为null或者size==0,则返回null
String trimToNull = StringUtils.trimToNull(" "); // abc,截取字符串
String truncate = StringUtils.truncate("abcde", 3);
// cdefg,从第二个起,截取5个长度
String truncate = StringUtils.truncate("abcdefghl", 2, 5);
// ddds与trim类似
String strip = StringUtils.strip(" dd d s ");
// yes, it is,去掉指定的开头字符和结尾字符,第二个字符为dd或者da也会有同样输出
String strip = StringUtils.strip("ddyes, it is ddd", "d");
// yes, it is ddd
String stripStart = StringUtils.stripStart("ddyes, it is ddd", "d");
// ddyes, it is
String stripEnd = StringUtils.stripEnd("ddyes, it is ddd", "d");
// [it is, dd],去掉参数中所有元素的前后空格
String[] stripAll = StringUtils.stripAll(" it is ", " dd ");
// [it is , it],去掉数组中每个元素前后的指定字符
String[] stripAll = StringUtils.stripAll(new String[] { "ddit is d", "ditd" }, "d");
// false
boolean equals = StringUtils.equals(null, "");
// true
boolean equalsIgnoreCase = StringUtils.equalsIgnoreCase("abc", "ABC");
// [,ab,cde, dsd,] 2个元素,默认分隔符为空白字符
String[] split = StringUtils.split(",ab,cde dsd,");
// [ab, cde , dsd] 3个元素,去掉了为空的元素,空白字符组成的字符串会保留
String[] split = StringUtils.split(",ab,cde ,,dsd,", ",");
// [ab, cde, dsd] 3个元素,以,和空白字符分隔,第二个参数中每个字符都当成一个分隔符,与上一个方法比,放方法第二个元素后没有空白字符
String[] split = StringUtils.split(",ab,cde ,,dsd,", ", ");
// [ab, cde ,,dsd,] 2个元素,由于最大只允许2个
String[] split = StringUtils.split(",ab,cde ,,dsd,", ", ", 2);
// [,ab,cde , ,dsd,] 2个元素,第二个参数所有字符当成一个整体的分隔符
String[] splitByWholeSeparator = StringUtils.splitByWholeSeparator(",ab,cde , ,dsd,", ", ");
// [, dd, ],3个元素,两个空的
String[] splitPreserveAllTokens = StringUtils.splitPreserveAllTokens(" dd ");
// [, aa, , ],4个元素,3个空的
String[] splitPreserveAllTokens = StringUtils.splitPreserveAllTokens(",aa,,", ",");
// [, aa, , bb, ] 5个元素,以,或者空白字符分隔
String[] splitPreserveAllTokens = StringUtils.splitPreserveAllTokens(",aa, bb,", ", ");
// [,aa, bb,] 2个,以, 作为一个整体分隔
String[] splitByWholeSeparatorPreserveAllTokens = StringUtils.splitByWholeSeparatorPreserveAllTokens(",aa, bb,",
", ");
// [ABC, 123, abc, ;,., I, t] 6个元素
String[] splitByCharacterType = StringUtils.splitByCharacterType("ABC123abc;,.It"); String join = StringUtils.join("12", "a", "df", "3"); // 12adf3
List<String> ls = new ArrayList<>();
ls.add("aa");
ls.add("bb");
ls.add("cc");
// insert into table values ('aa','bb','cc');,在组织'aa','bb','cc'
String join = "'" + StringUtils.join(ls, "','") + "'";
// abc
String deleteWhitespace = StringUtils.deleteWhitespace(" a b c ");
// abc is it
String remove = StringUtils.remove("abcdd is dddit", "d");
// dit isdd,只删除第一个参数起始处中对应的第二个参数。
String removeStart = StringUtils.removeStart("ddit isdd", "d");
// ddit isd, 只删除第一个参数结束处中对应的第二个参数。
String removeEnd = StringUtils.removeEnd("ddit isdd", "d");
// it is
String removeIgnoreCase = StringUtils.removeIgnoreCase("ddit isdd", "D");
// rdit
// isdd,虽然replace的功能已经包含有replaceOne,但如果确定只有一个需要替换,最好还是使用replaceOne,因为这个找到一个替换后就会停止查找
String replaceOnce = StringUtils.replaceOnce("ddit isdd", "d", "r");
// rdit isdd
String replaceOnceIgnoreCase = StringUtils.replaceOnceIgnoreCase("ddit isdd", "D", "r");
// rrit isrr
String replace = StringUtils.replace("ddit isdd", "d", "r");
// rrit isrr
String replaceIgnoreCase = StringUtils.replaceIgnoreCase("ddit isdd", "D", "r");
// rris isrr,批量替换
String replaceEach = StringUtils.replaceEach("ddit isdd", new String[] { "d", "t" }, new String[] { "r", "s" });
// tcte
String replaceEachRepeatedly = StringUtils.replaceEachRepeatedly("abcde", new String[] { "ab", "d" },
new String[] { "d", "t" });
// aaaaaa 将第一个参数重复第二个参数次,形成一个新的字符串
String repeat = StringUtils.repeat("aa", 3);
// aa,aa,aa 将第一个参数重复第三个参数次,并且以第二个参数分隔,形成一个新的字符串
String repeat = StringUtils.repeat("aa", ",", 3);
// ab,在左侧填充两个空白字符,形成一个4个字符的字符串,
String leftPad = StringUtils.leftPad("ab", 4);
// ab ,在两边填充空白字符,形成一个以第一个参数为中心的4个字符串长度字符串
String center = StringUtils.center("ab", 4);
// true,正整数返回true
boolean numeric = StringUtils.isNumeric("123");
// true 正整数,且包含有空白字符或者空字符串,空白字符,返回true
boolean numericSpace = StringUtils.isNumericSpace("12 3");
// 5417543010,获取字符串中的数字,并拼接在一起
String digits = StringUtils.getDigits("(541) 754-3010");
// true,字符串size==0或者空白字符,返回true,null及其他字符返回false
boolean whitespace = StringUtils.isWhitespace(" ");
// abcdefg...,显示指定长度的字符串,多余的使用...
String abbreviate = StringUtils.abbreviate("abcdefghijklmnopq", 10);
// abcdefg***
String abbreviate = StringUtils.abbreviate("abcdefghijklmnopq", "***", 10);
// abcd***opq
String abbreviateMiddle = StringUtils.abbreviateMiddle("abcdefghijklmnopq", "***", 10);
// a,获取数组共所有元素相同的前缀
String commonPrefix = StringUtils.getCommonPrefix("abcdf", "ads", "arf");
// true, endsWith同理
boolean startsWith = StringUtils.startsWith("abcdef", "ab");
// true,endsWithIgnoreCase同理
boolean startsWithIgnoreCase = StringUtils.startsWithIgnoreCase("abcdefg", "aB");
// true,第一个参数的前缀匹配第二个数组参数中的任何一个元素时,返回true,endsWithAny同理
boolean startsWithAny = StringUtils.startsWithAny("abcdef", new String[] { "x", "ab", " " });
// abcxyzddd,如果出第一个参数的后缀包含在后面参数中,则直接返回第一个参数,否则将返回第一个参数+第二个参数
String appendIfMissing = StringUtils.appendIfMissing("abcxyz", "ddd", new String[] { "qwe", "123" });
// dddabcxyz,原理同上
String prependIfMissing = StringUtils.prependIfMissing("abcxyz", "ddd", new String[] { "qwe", "123" });
// cbd
String encodedString = StringUtils.toEncodedString(new byte[] { 'c', 'b', 'd' }, Charset.defaultCharset());
// "xxx"
String wrap = StringUtils.wrap("xxx", "\"");
// *xx*
String wrapIfMissing = StringUtils.wrapIfMissing("xx", "*");
// 前后必须有相同字符才可以unwrap
String unwrap = StringUtils.unwrap("'aa'", "'");
// {97,98,99}
int[] codePoints = StringUtils.toCodePoints("abc");
// abc,删除最后一个字符,如果是\r\n则一起删除
String chop = StringUtils.chop("abc\r\n");
// abc,如果最后存在换行符,则删除最后的换行符
String chomp = StringUtils.chomp("abc\r\n");
// true
boolean contains = StringUtils.contains("abcd", "ab");
// true
boolean containsAny = StringUtils.containsAny("abcdefg", "2", "a");
// false
boolean containsOnly = StringUtils.containsOnly("abcdefg", "aa");
// true
boolean containsIgnoreCase = StringUtils.containsIgnoreCase("abcdef", "aB");
// false
boolean containsNone = StringUtils.containsNone("abcdef", 'a', 'x');
// true
boolean containsWhitespace = StringUtils.containsWhitespace("aa bbc"); // 此外还有substring,indexof等方法

commons-lang3之StringUtils的更多相关文章

  1. commons lang3的StringUtils中isEmpty()方法和isBlank()方法的区别

    先给结论: 1. StringUtils.isEmpty()中的空格作非空处理2. StringUtils.isNotEmpty()是StringUtils.isEmpty()取反后的结果3. Str ...

  2. spring异常记录-----java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils

    今天在练习怎样SSH中进行单元測试的时候出现下列异常: SEVERE: Exception starting filter Struts2 java.lang.NoClassDefFoundError ...

  3. Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang3.StringUtils

    1.错误叙述性说明 2014-7-10 23:12:23 org.apache.catalina.core.StandardContext filterStart 严重: Exception star ...

  4. NoClassDefFoundError: org/apache/commons/lang3/StringUtils

    出错信息: 2014-2-5 21:38:05 org.apache.catalina.core.StandardContext filterStart严重: Exception starting f ...

  5. Hadoop java.lang.ClassNotFoundException: org.apache.commons.lang3.StringUtils

    .jar 学习好友推荐案例的时候,提交运行时报错找不到StringUtils java.lang.ClassNotFoundException: org.apache.commons.lang3.St ...

  6. struts2中的错误--java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils

    2013-4-7 10:13:56 org.apache.catalina.startup.HostConfig checkResources 信息: Reloading context [/chap ...

  7. ERROR----java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils

    2013-4-28 13:17:57 org.apache.catalina.core.StandardContext filterStart 严重: Exception starting filte ...

  8. 【java】org.apache.commons.lang3功能示例

    org.apache.commons.lang3功能示例 package com.simple.test; import java.util.Date; import java.util.Iterat ...

  9. Apache Commons Lang的StringUtils.isEmpty(STR)和StringUtils.isBlank(STR)

    Apache Commons Lang是常用的基础框架,其中字符串判空在项目中尤为常用,而自己常常忘记他们的区别. package com.nicchagil.test; import org.apa ...

  10. org.apache.commons.lang3.ArrayUtils 学习笔记

    package com.nihaorz.model; /** * @作者 王睿 * @时间 2016-5-17 上午10:05:17 * */ public class Person { privat ...

随机推荐

  1. c语言总练习题

    !4,42 ?45 1 Description 键盘输入一个双精度数据,乘以2以后输出 Input 输入一个double型数据 Output 输出它的两倍数,结果保留8位小数 Sample Input ...

  2. “.Net 社区大会”(dotnetConf) 2018 Day 1 主题演讲

    Miguel de Icaza.Scott Hunter.Mads Torgersen三位大咖给大家带来了 .NET Core ,C# 以及 Xamarin的精彩内容: 6月份已经发布了.NET Co ...

  3. [AI开发]基于深度学习的视频多目标跟踪实现

    据我目前了解掌握,多目标跟踪大概有两种方式: Option1 基于初始化帧的跟踪,在视频第一帧中选择你的目标,之后交给跟踪算法去实现目标的跟踪.这种方式基本上只能跟踪你第一帧选中的目标,如果后续帧中出 ...

  4. 【STM32H7教程】第3章 STM32H7整体把控

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第3章   STM32H7整体把控 初学STM32H7一 ...

  5. python的进程与线程(二)

    线程 之前了解了操作系统的发展史,也知道了进程和线程的概念,归纳一下就是:         进程:本质上就是一段程序的运行过程(抽象的概念)         线程:最小的执行单元,是进程的实体     ...

  6. 安装window下的redis,redis可视化管理工具(Redis Desktop Manager)安装,基础使用,实例化项目

    以下包括内容: 一.redis下载安装,启动 二.Redis可视化管理工具(Redis Desktop Manager)安装 三.实例化项目 一.redis下载安装,启动 1,redis官方下载地址: ...

  7. MyX5TbsDemo【体验腾讯浏览服务Android SDK (完整版)】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 按照官网上的说明:可独立下载x5内核,也可共享使用微信或手Q的x5内核. 本Demo在引用腾讯X5内核的基础上进行了封装.参考< ...

  8. Vue Mixin 与微信小程序 Mixins 应用

    什么是Mixin(混入) Mixin是一种思想,用来实现代码高度可复用性,可以针对属性复制实现代码复用的想法进行一个扩展,就是混入(mixin).混入并不是复制一个完整的对象,而是从多个对象中复制出任 ...

  9. DSAPI+DS控件库 Windows7风格控件演示

    效果图 部分代码 DSAPI.Win7特性.任务栏特效.初始化() '这句非常重要,很多对任务栏特性的操作都需要先初始化 DSAPI.Win7特性.设置任务栏窗口缩略图(Me, My.Resource ...

  10. 如何發佈一個完整Node.js Module

    本文會透過以下幾個段落,讓各位一步一步學習如何寫一個自已的Node.js Module並且發佈到npm package上 Node.js Module 結構 我們先建立一個 NodeModuleDem ...