首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >全面掌握 Apache Commons Lang 的 StringUtils:Java 字符串处理的瑞士军刀

全面掌握 Apache Commons Lang 的 StringUtils:Java 字符串处理的瑞士军刀

作者头像
DevLlama
发布2026-06-01 20:24:42
发布2026-06-01 20:24:42
770
举报

在 Java 开发中,对字符串(String)的操作无处不在。然而,原生的 String 类方法在面对 null 值时常常会抛出 NullPointerException,这使得代码中充斥着大量的空值检查,降低了可读性和开发效率。

Apache Commons Lang 库中的 StringUtils 类正是为了解决这一痛点而生。它提供了一套空安全(null-safe)、功能强大且易于使用的静态方法,覆盖了从基本判断到复杂转换的几乎所有常见字符串操作场景。

StringUtils 核心特性:Null-Safe 字符串操作

设计原则

  • • 输入为 null 时,不抛异常,而是返回合理默认值(如 null""false0 等)。
  • • 若方法因 null 输入而抛出 NullPointerException,则视为 bug
  • • 所有方法均为 线程安全(ThreadSafe),都是静态qie3无状态的,可以安全的在多线程环境中使用。

本文将 StringUtils 的众多方法按功能划分为八大类别,并辅以典型用例,助你快速上手。

一、空值、空白与字符内容判断

  • isEmpty:为 null 或长度为 0(即 "")。
  • isNotEmpty:非空(即 !isEmpty)。
  • isBlank:为 null、空或仅含空白字符。
  • isNotBlank:非空白(即 !isBlank)。
  • isAnyEmpty:任意一个为 null""
  • isAnyBlank:任意一个为 null、空或纯空白。
  • isNoneEmpty:所有都不为 null 且不为空字符串。
  • isNoneBlank:所有都不为 null、空或纯空白。
  • isAllEmpty:所有都为 null""
  • isAllBlank:所有都为 null、空或仅含空白字符。
  • containsWhitespace:是否包含任何空白字符。
  • isAllLowerCase:所有字母均为小写(忽略非字母字符)。
  • isAllUpperCase:所有字母均为大写(忽略非字母字符)。
  • isMixedCase:同时包含大写和小写字母。

二、修剪、标准化与重音处理

  • trim:去除首尾 ASCII 控制字符(码值 ≤ 32)。
  • strip:去除首尾所有 Character.isWhitespace() 定义的空白字符。
  • stripStart:从开头移除指定字符集中的任意字符。
  • stripEnd:从结尾移除指定字符集中的任意字符。
  • deleteWhitespace:删除字符串中所有空白字符。
  • normalizeSpace:将连续空白替换为单个空格,并去除首尾空格。
  • stripAccents:移除 Unicode 重音符号(如 cafécafe)。

三、大小写转换

  • upperCase:使用系统默认 Locale 转为大写。
  • lowerCase:使用系统默认 Locale 转为小写。
  • capitalize:将首字母转为大写,其余不变。
  • uncapitalize:将首字母转为小写,其余不变。
  • swapCase:将大写字母转小写,小写字母转大写,其他不变。

四、安全比较与相等性

  • equals:空安全地判断两个字符序列是否相等。
  • equalsIgnoreCase:忽略大小写的空安全相等判断。
  • compare:空安全字典序比较(null 视为最小)。
  • compareIgnoreCase:忽略大小写的空安全字典序比较。
  • equalsAny:是否等于任意一个候选字符串。
  • equalsAnyIgnoreCase:忽略大小写的 equalsAny

五、前缀、后缀、包含与索引查找

  • startsWith:是否以指定前缀开头。
  • startsWithIgnoreCase:忽略大小写的前缀判断。
  • startsWithAny:是否以任意一个给定字符串开头。
  • endsWith:是否以指定后缀结尾。
  • endsWithIgnoreCase:忽略大小写的后缀判断。
  • endsWithAny:是否以任意一个给定字符串结尾。
  • contains:是否包含指定子串。
  • containsIgnoreCase:忽略大小写的包含判断。
  • containsAny:是否包含任意一个指定字符或子串。
  • containsNone:是否不包含任何非法字符。
  • containsOnly:是否仅由指定字符组成。
  • indexOf:返回指定字符或子串首次出现的位置,未找到返回 -1。
  • lastIndexOf:返回指定字符或子串最后一次出现的位置。

六、截取、分隔与连接

  • substring:从指定位置截取子串。
  • left:获取左起指定长度的字符。
  • right:获取右起指定长度的字符。
  • mid:从指定位置开始取指定长度的字符。
  • substringBefore:返回第一个分隔符之前的部分。
  • substringAfter:返回第一个分隔符之后的部分。
  • substringBetween:返回两个相同标签或开闭标签之间的内容。
  • substringsBetween:返回所有匹配的开闭标签之间的内容(数组)。
  • split:按空白、字符或字符串分割。
  • splitByWholeSeparator:按完整分隔符分割(非正则)。
  • splitPreserveAllTokens:分割时保留空 token。
  • join:连接数组或可迭代对象的元素。
  • joinWith:类似 String.join,支持任意对象。
  • wrap:用字符或字符串包裹原字符串。
  • unwrap:若首尾是成对的指定字符或字符串,则移除。

七、填充、缩略、重复与旋转

  • leftPad:左填充至指定长度。
  • rightPad:右填充至指定长度。
  • center:居中填充至指定长度。
  • repeat:重复字符串或字符多次。
  • abbreviate:缩略并在末尾加 ...(总长不超过指定值)。
  • abbreviateMiddle:保留首尾,中间替换为指定字符串。
  • rotate:循环移位(正数右移,负数左移)。

八、替换、删除与覆盖

  • replace:全局替换所有匹配项。
  • replaceEach:按顺序批量替换(一次遍历)。
  • replaceEachRepeatedly:重复替换直到结果稳定。
  • replaceChars:按字符映射表批量替换。
  • replacePattern:使用正则表达式替换。
  • remove:删除所有匹配的子串或字符。
  • removeStart:若以指定前缀开头,则移除该前缀。
  • removeEnd:若以指定后缀结尾,则移除该后缀。
  • removePattern:使用正则表达式删除匹配内容。
  • overlay:用新字符串覆盖指定区间的内容。

九、默认值与首个有效值

  • defaultString:若为 null,返回空字符串或指定默认值。
  • defaultIfEmpty:若为 null"",返回指定默认值。
  • defaultIfBlank:若为 null"" 或仅空白,返回指定默认值。
  • firstNonEmpty:返回首个非 null 且非空的字符串。
  • firstNonBlank:返回首个非 null、非空且非纯空白的字符串。

十、反转、差异与公共前缀

  • reverse:反转整个字符串。
  • reverseDelimited:按分隔符分段后反转顺序(如 "a.b.c""c.b.a")。
  • getCommonPrefix:返回多个字符串的最长公共前缀。
  • difference:返回第二个字符串中与第一个不同的后缀部分。
  • indexOfDifference:返回两个或多个字符串第一个出现差异的位置。

十一、计数、距离与编码

  • countMatches:统计指定字符或子串出现的次数。
  • getLevenshteinDistance:计算两字符串的编辑距离(可设阈值)。
  • toEncodedString:将字节数组安全地解码为字符串。

十二、通用工具方法

  • toString:安全调用 toString()null 返回 "null" 或自定义字符串。
  • isAlpha:是否只包含字母(Unicode 字母)。
  • isAlphaSpace:是否只包含字母和空格。
  • isAlphanumeric:是否只包含字母和数字。
  • isAlphanumericSpace:是否只包含字母、数字和空格。
  • isNumeric:是否只包含数字字符(包括 Unicode 数字)。
  • isNumericSpace:是否只包含数字和空格。

十三、【过时】方法汇总

以下方法已标记 @Deprecated,建议迁移到 org.apache.commons.text.StringUtils(如适用)。

  • 【过时】appendIfMissing:若不以指定后缀结尾,则追加。
  • 【过时】prependIfMissing:若不以指定前缀开头,则前置。
  • 【过时】chomp:移除末尾换行符(建议改用 removeEnd)。
  • 【过时】chop:移除最后一个字符(行为模糊,不推荐)。

⚠️ 官方建议:appendIfMissing / prependIfMissing 系列已迁移至 Apache Commons Text 库(org.apache.commons.text.StringUtils),未来版本可能彻底移除。

总结

StringUtils 是 Apache Commons Lang 库中最广受青睐的工具类之一,堪称 Java 字符串处理的瑞士军刀

它以三大核心优势,彻底革新了日常字符串操作:

  • 空安全(null-safe)设计:自动处理 null 输入,从根本上杜绝 NullPointerException
  • 语义化命名:方法名即文档,一眼看懂用途,显著降低理解与维护成本;
  • 场景全覆盖:从判空、截取、拼接到大小写转换、空白处理、模式替换……几乎囊括所有常见需求,让你无需重复造轮子。

借助 StringUtils,开发者能写出更简洁、健壮且可读性更高的代码。

下次当你需要处理字符串时,不妨先看看 StringUtils 是否已经为你准备好了现成的解决方案。这不仅能让你的代码更健壮,还能显著提升开发效率。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-03-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DevLlama 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • StringUtils 核心特性:Null-Safe 字符串操作
    • 一、空值、空白与字符内容判断
    • 二、修剪、标准化与重音处理
    • 三、大小写转换
    • 四、安全比较与相等性
    • 五、前缀、后缀、包含与索引查找
    • 六、截取、分隔与连接
    • 七、填充、缩略、重复与旋转
    • 八、替换、删除与覆盖
    • 九、默认值与首个有效值
    • 十、反转、差异与公共前缀
    • 十一、计数、距离与编码
    • 十二、通用工具方法
    • 十三、【过时】方法汇总
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档