字符串是一种在开发中经常使用到的数据类型,对字符串的处理也变得非常重要,字符串本身有一些方法,但都没有对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. mpvue小程序开发之 wx.getUserInfo获取用户信息授权

    一.背景 在使用美团的mpvue2.0框架搭建起小程序项目后,做获取用户信息时遇到一些问题:微信小程序更新api后,获取用户信息只能通过button上的绑定方法 来获取用户信息,vue上方法绑定不能直 ...

  2. PHP面向对象特性

    目录 创建对象 成员属性 成员方法 构造方法 析构方法 垃圾回收机制 访问修饰符 魔术方法 对象比较 继承 重载 属性重载 方法重写 属性重写 静态属性 静态方法 多态 类型约束 抽象类 接口 fin ...

  3. 安卓 App 性能专项测试指标之 CPU 深度解析

    指标背景 很多场景下我们去使用App,可能会碰到手机会出现发热发烫的现象.这是因为CPU使用率过高.CPU过于繁忙,会使得整个系统无法响应用户,整体性能降低,用户体验变得相当差,也容易引起ANR等等一 ...

  4. IDEA代码格式化快捷键(新)

    快捷键:Ctrl+Alt+L 效果: 之前: 之后:

  5. 与其争论java和.net的差别,还不如多想点用编程技术挣钱的方式

    年前和最近,我发现在博客园和其它地方,有不少争论java和.net哪个好的文章,其实这是种好现象.虽然到了架构层面,技术是通用的,但兼听则明,而且技多不压身,多种挣钱的方式总不会错. 本人最近主攻Ja ...

  6. 使用chan的时候选择对象还是指针

    使用chan的时候选择对象还是指针 今天在写代码的时候遇到一个问题,在创建一个通道的时候,不确定创建的通道是使用chan A还是chan *A. 思考了一下,觉得这个应该和函数一样是一个值传递还是参数 ...

  7. Devexpress 常用的功能

    一 .GridControl的删除操作 private void rILinkEditInfoDel_Click(object sender, EventArgs e) { if (XtraMessa ...

  8. Android SDK 开发——发布使用踩坑之路

    前言 在 Android 开发过程中,有些功能是通用的,或者是多个业务方都需要使用的. 为了统一功能逻辑及避免重复开发,因此将该功能开发成一个 SDK 是相当有必要的. 背景 刚好最近自己遇到了类似需 ...

  9. AspNetCoreapi 使用 Docker + Centos 7部署

    好久没有更新文章了,前段时间写了一系列的文章放到桌面了,想着修修改改,后来系统中勒索病毒了还被公司网络安全的抓到是我电脑,后来装系统文章给装丢了.然后好长一段时间没有写了. 今天记录一下AspNetC ...

  10. DevExpress AspxGridView分页使用隐藏系统默认英文分页

    1第一篇文章研究了怎么汉化,但是在实际使用过程中发现汉化的有小问题,DevExpress支持自定义按钮,也可以在属性中设置成中文,这样避免汉化不准确的问题 <dx:ASPxGridView ID ...