当前位置: 首页 > news >正文

SpringBoot中StringUtils工具类的使用

        SpringBoot 项目中,StringUtils是一个高频使用的工具类,它极大地简化了字符串操作。主要有两个来源:​​Spring Framework​​ 自带的 org.springframework.util.StringUtils和 ​​Apache Commons Lang 3​​ 提供的 org.apache.commons.lang3.StringUtils。它们各有侧重,下面这个表格能帮你快速了解它们的核心区别和常用方法。


特性

Spring Framework StringUtils

Apache Commons Lang3 StringUtils

​核心区别​

提供 Spring 生态基础字符串操作,满足日常开发

功能极其全面,几乎覆盖所有字符串处理场景

​空值判断​

isEmpty(Object str)
hasLength(CharSequence str)
hasText(CharSequence str)

isEmpty(String str)
isBlank(String str)
isNotEmpty(String str)
isNotBlank(String str)

​检查内容​

containsWhitespace(String str)
countOccurrencesOf(String str, String sub)

contains(String str, String search)
countMatches(CharSequence str, CharSequence sub)

​大小写处理​

startsWithIgnoreCase(String str, String prefix)
endsWithIgnoreCase(String str, String suffix)

equalsIgnoreCase(CharSequence cs1, CharSequence cs2)
capitalize(String str)
uncapitalize(String str)

​修剪操作​

trimWhitespace(String str)
trimLeadingWhitespace(String str)
trimTrailingWhitespace(String str)
trimAllWhitespace(String str)

trim(String str)
strip(String str)
stripToNull(String str)
stripToEmpty(String str)

​替换与删除​

replace(String inString, String oldPattern, String newPattern)
delete(String inString, String pattern)

replace(String text, String searchString, String replacement)
remove(String text, String remove)

​拆分与拼接​

trimArrayElements(String[] array)
commaDelimitedListToStringArray(String str)

split(String str, String separator)
join(Object[] array, String separator)

​其他实用功能​

substringMatch(CharSequence str, int index, CharSequence substring)
uriDecode(String source, Charset charset)

substring(String str, int start)
abbreviate(String str, int maxWidth)
isNumeric(String str)
reverse(String str)


 一、如何选择与使用

  • ​选择依据​​:如果你的项目是纯粹的 SpringBoot 应用,进行基本的字符串判断和操作,Spring Framework 自带的 StringUtils通常就够了,无需引入额外依赖。如果你需要进行更复杂的字符串处理,如​​数字判断、随机字符串生成、复杂的截取和格式化​​等,那么 Apache Commons Lang3 是更强大的选择。

  • ​依赖引入​​:使用 Apache Commons Lang3 需要在 pom.xml中添加依赖。

    <dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.12.0</version> <!-- 请使用最新版本 -->
    </dependency>

    核心方法辨析​​:理解关键方法的细微差别非常重要,尤其是在处理空字符串和空白符时。

  • isEmptyvs isBlank​:这是最容易混淆的一点。isEmpty只检查 null和长度为零,而 isBlank还会将纯空白字符(如空格、制表符)视为“空”。例如,对于字符串 " "isEmpty返回 false,而 isBlank返回 true

  • hasLengthvs hasText​:Spring 中的 hasLength等价于 !isEmpty,即不为 null 且长度大于零。而 hasText要求更严格,字符串必须包含非空白字符。例如," "能通过 hasLength检查,但无法通过 hasText检查。

  • 方法

    描述

    null

    ""

    " "

    "a"

    " a "

    isEmpty(str)

    仅判断是否为 null或 ​​空字符串​

    isBlank(str)

    判断是否为 null、空字符串或 ​​纯空白字符​

    ​简单记忆:​

  • 用 isBlank()来验证用户输入(如表单字段),因为用户可能只输入空格。

  • 用 isEmpty()来检查明确的空值或空字符串。


二、常用方法分类总结

1. 空值 & 空白检查
// 检查空值或空白
StringUtils.isBlank(null); // true
StringUtils.isBlank("");   // true
StringUtils.isBlank(" ");  // true// 反向检查
StringUtils.isNotBlank(" hello "); // true// 仅检查空值或空字符串
StringUtils.isEmpty(" "); // false
StringUtils.isNotEmpty(" "); // true
2. 修剪与清理
// 修剪首尾空格(类似JDK的trim,但null安全)
StringUtils.trim(null); // null
StringUtils.trim("  hello  "); // "hello"// 修剪首尾空白(包括Unicode空白符,比trim更强大)
StringUtils.strip("  hello  "); // "hello"// 删除所有空格
StringUtils.deleteWhitespace(" h e l l o "); // "hello"
3. 大小写转换与首字母处理
// 首字母大写
StringUtils.capitalize("hello"); // "Hello"// 首字母小写
StringUtils.uncapitalize("Hello"); // "hello"// 全大写/全小写(null安全)
StringUtils.upperCase("Hello"); // "HELLO"
StringUtils.lowerCase("Hello"); // "hello"
4. 比较与包含判断
// 安全比较(可处理null值)
StringUtils.equals(null, null); // true
StringUtils.equals("abc", "ABC"); // false// 忽略大小写比较
StringUtils.equalsIgnoreCase("abc", "ABC"); // true// 判断包含关系(null安全)
StringUtils.contains("hello world", "wor"); // true
StringUtils.containsIgnoreCase("Hello World", "hello"); // true
5. 截取与拆分
// 安全截取子串
StringUtils.substring("hello world", 0, 5); // "hello"// 拆分字符串
String[] parts = StringUtils.split("a,b,c", ","); // ["a", "b", "c"]// 拆分并限制结果数量
String[] parts2 = StringUtils.split("a:b:c:d", ":", 2); // ["a", "b:c:d"]
6. 拼接与连接
// 连接数组或集合
StringUtils.join(new String[]{"a", "b", "c"}, ","); // "a,b,c"// 连接时处理null元素
StringUtils.join(new String[]{"a", null, "c"}, "-"); // "a--c"
7. 替换与删除
// 替换所有匹配项
StringUtils.replace("aba", "a", "z"); // "zbz"// 替换每次匹配项
StringUtils.replaceEach("abcde", new String[]{"a", "c"}, new String[]{"x", "y"}); // "xbyde"// 删除所有匹配项
StringUtils.remove("hello world", "o"); // "hell wrld"
8. 其他实用工具
// 重复字符串
StringUtils.repeat("ab", 3); // "ababab"// 反转字符串
StringUtils.reverse("hello"); // "olleh"// 计算匹配次数
StringUtils.countMatches("abracadabra", "a"); // 5// 获取字符串长度(null安全)
StringUtils.length(null); // 0

三、最佳实践与示例

1.​​用户输入验证​
public void processUserInput(String input) {if (StringUtils.isBlank(input)) {throw new IllegalArgumentException("输入不能为空");}// 处理输入String cleanedInput = StringUtils.strip(input);
}
2.​​安全处理字符串操作​
// 避免NullPointerException
String result = StringUtils.defaultString(possibleNullString, "default");// 安全比较
if (StringUtils.equals(userInput, expectedValue)) {// 执行操作
}
3.​​高效字符串处理​
// 构建路径(避免开头多余的分隔符)
String path = StringUtils.joinWith("/", "", "usr", "local", "bin"); // "/usr/local/bin"// 处理CSV数据
String[] values = StringUtils.split(csvLine, ",", -1);

四、扩展技巧

1.链式操作​​:结合多个方法完成复杂处理
String processed = StringUtils.capitalize(StringUtils.strip(StringUtils.remove(userInput, "\n")));
2.​​与Java 8 Stream API结合使用​
List<String> filtered = strings.stream().filter(StringUtils::isNotBlank).map(StringUtils::trim).collect(Collectors.toList());
3.自定义扩展​​(如示例中的扩展类):
  • 添加项目特定的字符串处理逻辑

  • 封装常用模式

  • 提供更语义化的方法名

http://www.dtcms.com/a/419876.html

相关文章:

  • 阿里云网站方案建设书模板wordpress评论编辑器
  • SpringBoot核心注解、自动配置原理和配置文件
  • 46.NAT、代理服务、内网穿透
  • 网站平台建设规划西安最好的设计院排名
  • 基于Spring Boot与SSM的中药实验管理系统架构设计
  • 【Spring】Spring Boot 自动配置原理分析
  • git 的常用命令
  • 现在ui做的比较好的网站免费云手机无限时间版
  • 整体设计 逻辑系统程序 之2 Target 之1 靶点根治的逻辑体系深化与落地设计:从规则双轨到语言 - 知识桥梁
  • 网站php源码长沙设计公司都有哪些
  • 第一版代码
  • 2025年AI费控系统避坑指南:智能风控+预算管控能力对比
  • Windows的多路复用IOCP
  • 做网站的规范暴雪公司现状
  • 前端提效工具清单,常用前端效率工具推荐与开发提效实战经验
  • 做的网站怎么把技术支持去掉个人社保缴费年限怎么查询
  • 李宏毅机器学习笔记15
  • 数字化转型:开发者思维破局之道
  • 网站会员功能介绍营销背景包括哪些内容
  • 【NCS随笔】peripheral_hids_mouse例程修改为不使用PIN码绑定
  • 第三方软件验收测试:【AutoIt与Selenium结合测试文件上传/下载等Windows对话框】
  • 网站的二级目录是什么10个不愁销路的小型加工厂
  • K8S中关于容器对外提供服务网络类型
  • 建设网站需要虚拟空间嘛专业网站制作公司采用哪些技术制作网站?
  • 超声波水表:原理、实现与核心技术解析
  • 怎样 建设电子商务网站直播网站app开发
  • Nginx 核心功能配置:访问控制、用户认证、HTTPS 与 URL 重写等
  • 大模型显存占用完全指南:从训练到推理的计算公式与实战案例(建议收藏)
  • 惠州做网站采招网招标官网
  • 烟台做网站找哪家好哪个网站可以做海报