常用工具类-StringUtils

2024-02-05 04:12
文章标签 常用工具 stringutils

本文主要是介绍常用工具类-StringUtils,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

常用工具类-StringUtils

  • StringUtils常用方法概览
  • ① 判断字符串是否为空
  • ② 分隔字符串
  • ③ 判断字符串是否为纯数字的字符串
  • ④ 将集合拼接为字符串
  • 小结

StringUtils常用方法概览

StringUtils 是 Apache Commons Lang 库中的一个非常有用的工具类,它提供了许多操作 String 的静态方法。使用 StringUtils 可以使字符串操作更加简便和高效。以下是一些 StringUtils 中常用的方法:

  1. isEmpty() 和 isNotEmpty():
  • isEmpty(String str): 检查一个字符串是否为空(null 或长度为 0)。
  • isNotEmpty(String str): 检查一个字符串是否不为空。
  1. isBlank() 和 isNotBlank():
  • isBlank(String str): 检查一个字符串是否为空白(null、空或仅包含空白字符)。
  • isNotBlank(String str): 检查一个字符串是否不为空白。
  1. trim() 和 strip():
  • trim(String str): 去除字符串两端的空白字符。
  • strip(String str, String stripChars): 去除字符串两端指定的字符。
  1. equals() 和 equalsIgnoreCase():
  • equals(String str1, String str2): 比较两个字符串是否相等,处理 null 值。
  • equalsIgnoreCase(String str1, String str2): 比较两个字符串是否相等,不区分大小写,同时处理 null 值。
  1. join() 和 split():
  • join(Object[] array, String separator): 使用指定的分隔符将数组元素连接成一个字符串。
  • join(Iterable<?> iterable, String separator): 使用指定的分隔符将可迭代对象的元素连接成一个字符串。
  • split(String str, String separatorChars): 根据指定的分隔符字符集将字符串拆分为数组。
  1. substring() 和 left() / right():
  • substring(String str, int start): 获取字符串从指定位置开始的子字符串。
  • substring(String str, int start, int end): 获取字符串从起始位置到结束位置的子字符串。
  • left(String str, int len): 获取字符串最左边的指定长度的子字符串。
  • right(String str, int len): 获取字符串最右边的指定长度的子字符串。
  1. contains() 和 containsIgnoreCase():
  • contains(String str, CharSequence seq): 检查一个字符串是否包含另一个字符序列。
  • containsIgnoreCase(String str, CharSequence seq): 检查一个字符串是否包含另一个字符序列,不区分大小写。
  1. replace() 和 overlay():
  • replace(String text, String searchString, String replacement): 替换字符串中所有出现的指定子字符串。
  • overlay(String str, String overlay, int start, int end): 用新的字符串覆盖原始字符串的指定部分。
  1. capitalize() 和 uncapitalize():
  • capitalize(String str): 将字符串的首字母变为大写。
  • uncapitalize(String str): 将字符串的首字母变为小写。
  1. remove() 和 delete():
  • remove(String str, char remove): 移除字符串中所有出现的指定字符。
  • deleteWhitespace(String str): 删除字符串中的所有空白字符。

这只是 StringUtils 类提供的方法的一小部分。在实际开发中,这个类可以大大简化字符串的操作和处理。

下面,使用几个StringUtils类的方法练习一下!

① 判断字符串是否为空

常用的判断字符串为空的方法:

  1. isEmpty():检查一个字符串是否为空(null 或长度为 0)。
  2. isBlank(): 检查一个字符串是否为空白(null、空或仅包含空白字符)。
  3. isNotEmpty():检查一个字符串是否不为空。
  4. isNotBlank():检查一个字符串是否不为空白。

查看一下isEmpty()和isBlank()的源码:

// isEmpty
public static boolean isEmpty(CharSequence cs) {return cs == null || cs.length() == 0;
}
// isBlank
public static boolean isBlank(CharSequence cs) {int strLen = length(cs);if (strLen == 0) {return true;} else {for(int i = 0; i < strLen; ++i) {if (!Character.isWhitespace(cs.charAt(i))) {return false;}}return true;}
}

② 分隔字符串

String类的split()方法可以完成字符串切片分割的功能,但是相较于StringUtils类中的split()方法较为不安全,如下面的代码

// 分隔字符串
String strToSplit = null;
String[] split1  = strToSplit.split(strToSplit); // 抛异常 java.lang.NullPointerException// StringUtils 更为安全,当传入的字符串为空时,不会抛异常
String[] split2 = StringUtils.split(strToSplit);
System.out.println(Arrays.toString(split2)); // null

StringUtils.split()的源码,其实最核心的方法,应该是splitWorker(),splitWorker()方法中完成了字符串切割的字符串检验,字符串切片。

public static String[] split(String str) {return split(str, (String)null, -1);
}public static String[] split(String str, String separatorChars, int max) {return splitWorker(str, separatorChars, max, false);
}private static String[] splitWorker(String str, String separatorChars, int max, boolean preserveAllTokens) {if (str == null) {return null;} else {int len = str.length();if (len == 0) {return ArrayUtils.EMPTY_STRING_ARRAY;} else {List<String> list = new ArrayList();int sizePlus1 = 1;int i = 0;int start = 0;boolean match = false;boolean lastMatch = false;if (separatorChars != null) {if (separatorChars.length() != 1) {label87:while(true) {while(true) {if (i >= len) {break label87;}if (separatorChars.indexOf(str.charAt(i)) >= 0) {if (match || preserveAllTokens) {lastMatch = true;if (sizePlus1++ == max) {i = len;lastMatch = false;}list.add(str.substring(start, i));match = false;}++i;start = i;} else {lastMatch = false;match = true;++i;}}}} else {char sep = separatorChars.charAt(0);label71:while(true) {while(true) {if (i >= len) {break label71;}if (str.charAt(i) == sep) {if (match || preserveAllTokens) {lastMatch = true;if (sizePlus1++ == max) {i = len;lastMatch = false;}list.add(str.substring(start, i));match = false;}++i;start = i;} else {lastMatch = false;match = true;++i;}}}}} else {label103:while(true) {while(true) {if (i >= len) {break label103;}if (Character.isWhitespace(str.charAt(i))) {if (match || preserveAllTokens) {lastMatch = true;if (sizePlus1++ == max) {i = len;lastMatch = false;}list.add(str.substring(start, i));match = false;}++i;start = i;} else {lastMatch = false;match = true;++i;}}}}if (match || preserveAllTokens && lastMatch) {list.add(str.substring(start, i));}return (String[])list.toArray(ArrayUtils.EMPTY_STRING_ARRAY);}}}

③ 判断字符串是否为纯数字的字符串

StringUtils.isNumeric()方法,可以更方便的判断当前的字符串是否是一个纯数字的字符串。
StringUtils.isNumericSpace() 方法,可以判断含有空格的数字字符串。

String strNum1 = "123";
String strNum2 = "123.45";
String strNum3 = "123f";
String strNum4 = "123q";
// 判断是否为纯数字字符串
System.out.println(StringUtils.isNumeric(strNum1)); // true
System.out.println(StringUtils.isNumeric(strNum2)); // false
System.out.println(StringUtils.isNumeric(strNum3)); // false
System.out.println(StringUtils.isNumeric(strNum4)); // false// isNumericSpace() 方法,可以判断含有空格的数字字符串
String strNum5 = "12 3";
System.out.println(StringUtils.isNumericSpace(strNum5)); // true
public static boolean isNumeric(CharSequence cs) {if (isEmpty(cs)) {return false;} else {int sz = cs.length();for(int i = 0; i < sz; ++i) {if (!Character.isDigit(cs.charAt(i))) {return false;}}return true;}
}

④ 将集合拼接为字符串

常见的场景,将集合的内容拼接为字符串

// 自己拼接集合内容为字符串
List<String> list = new ArrayList<>();
list.add("zhangsan");
list.add("lisi");
list.add("wangwu");
list.add("zhaoliu");
list.add("houqi");
System.out.println(list.toString()); // [zhangsan, lisi, wangwu, zhaoliu, houqi]

如果我们自己将集合的内容拼接为字符串的话,代码可能会写成下面这样:
写法一:利用增强for遍历集合内容,然后使用String += 去拼接字符串,缺点浪费内存,创建了循环次数+1个String类对象。

String strTemp = null;
for(String item : list){strTemp +=  item  + ",";
}
System.out.println(strTemp); // nullzhangsan,lisi,wangwu,zhaoliu,houqi,

写法二:使用StringBuilder来完成拼接,还是不够优雅。虽然只创建了两个对象,StringBuilder对象和sb.toString()的一个对象。

StringBuilder sb = new StringBuilder();
for (String item : list){sb.append(item).append(",");
}
System.out.println(sb);

而利用StringUtils.join()方法,我们可以非常简单的去完成集合内容的拼接,其实这段代码的底层也是StringBuilder,只不过我们调用更为方便了。

String joinListToStr = StringUtils.join(list, ",");
System.out.println(joinListToStr); // zhangsan,lisi,wangwu,zhaoliu,houqi

StringUtils.join()方法底层源码

public static String join(Iterator<?> iterator, String separator) {if (iterator == null) {return null;} else if (!iterator.hasNext()) {return "";} else {Object first = iterator.next();if (!iterator.hasNext()) {return Objects.toString(first, "");} else {StringBuilder buf = new StringBuilder(256);if (first != null) {buf.append(first);}while(iterator.hasNext()) {if (separator != null) {buf.append(separator);}Object obj = iterator.next();if (obj != null) {buf.append(obj);}}return buf.toString();}}
}

小结

StringUtils 是 Apache Commons Lang 库中的一个非常有用的工具类,它提供了许多操作 String 的静态方法。灵活使用,多读源码!

这篇关于常用工具类-StringUtils的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/679722

相关文章

Linux常用工具与命令日常记录(长期更新)

Linux常用工具与命令日常记录(长期更新) 目录 1.本地复制到远程2.Linux压缩拆包与解压3.生成随机密码4.ubuntu默认Python版本设置5.计算当前文件夹中文件数量6.windows中编写shell脚本,在Linux运行出错7.history 历史命令显示时间用户8.Ubuntu18.04设置源、网卡9.Ubuntu18.04设置网卡10.Ubuntu:自定义开

项目中的工具类StringUtils和DigestUtils

在项目中导入:commons-codec.jar和commons-lang.jar二个架包。 <span style="font-size:18px;">package junit;import org.apache.commons.codec.digest.DigestUtils;import org.apache.commons.lang.StringUtils;import or

软件测试常用工具总结(测试管理、单元测试、接口测试、自动化测试、性能测试、负载测试...)

前言 在软件测试的过程中,多多少少都是会接触到一些测试工具,作为辅助测试用的,以提高测试工作的效率,使用好了测试工具,能对测试起到一个很好的作用,同时,有些公司,也会要求掌握一些测试工具,或者,是在面试时,也会被问到测试工具的,比如,在面试时,最常见的问题便是,你在测试时,用的是什么测试工具?或者,要做性能测试时,要用什么测试工具进行测试会比较好?等等问题。 作为测试人员,了解下现在有哪些

新手必备:SpringBoot3如何使用redis?怎么配置?实现一个常用工具类?

最近在做 Spring Boot 项目,借此机会,我使用了 Spring Boot 3 和 JDK 17 的组合,整理了一下 Redis 的配置方式,并通过实践实现了常用的 Redis 工具类。我这里主要是整理一下如何在 Spring Boot 3 中使用 Redis,以及如何自定义工具类实现常见的 Redis 操作。 Spring Boot 3.x 和 JDK 17 兼容,特别是在 Sprin

java篇 常用工具类 0x05:基本类型的自动装箱拆箱

文章目录 数字基本类型的封装类和常用方法字符基本类型的封装类和常用方法布尔基本类型的封装类和常用方法 java 从第一个版本开始,就为每种基本类型提供了封装的类,以便可以将其当作类而非基本数据类型使用。 比如 List、Map 这些类,都是操作 Object,无法操作基本数据类型。你无法用 int 作为 Map 的 key 或 value,所以 java 允许让 int 封装

java篇 常用工具类 0x04:lambda

文章目录 lambda 的使用前提(限制)lambda 的使用形式lambda实际工作流程用 Exception 报错来追踪 lambda 调用流程自己定义能写成 lambda 格式的方法与接口 stream() 与 collect()lambda还可以抛出异常lambda 的精髓lambda 使用建议 在 java 中,类是一等公民,即什么东西都离不开类,一定得先有类,然后再往

java篇 常用工具类 0x03:Iterator 与 Iterable 接口

文章目录 Iterator 接口Iterable 接口手动实现 Iterable 接口示例 Iterator 接口 Iterator 接口在 java.util 包中。实现了 Iterator 接口的类就可以支持遍历操作。 public interface Iterator<E> {// 只需要关注到这两个抽象方法boolean hasNext(); // 还有没有

黑客常用工具

常用工具 tskill.exe  能察看和杀死系统隐藏进程的工具,和pslist一样不过支持win98  sysinfo.exe  察看系统信息的命令行工具  upx1.90.rar  鼎鼎大名的upx压缩工具1.90版  T-PsKit.rar  枚举系统信息的工具  wsu.rar  以其他用户身份或进程身份创建新的进程,适用于 Windows nt4/2000/xp/2003  a

Android天地图常用工具

天地图依赖资源包,直接把地址复制到浏览器下载: http://download.tianditu.com/download/mobile/Tiandituapi3.0.2%2820190103-02%29.zip /*** 天地图工具*/public class SkyLandMap {/*** 设置中心点** @param context 上下文对象* @param mapView 地图对象

MySQL性能问题诊断方法和常用工具

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL运行慢,出现性能问题,一般可以从三个方向来进行排查解决: 系统整体资源使用情况MySQL 内部运行的压力SQL语句的改写 首先从服务器的角度,我们从巡检的脚本角度入手,服务器的资源就那么几种