java中去除字符串两端空白应优先使用jdk11新增的strip(),因其基于unicode标准识别全角空格、零宽空格等广义空白;trim()仅支持ascii空格及5个控制字符,兼容旧版本但范围有限。

Java 中去除字符串两端空白字符,主要用 trim()(JDK 1.0 起支持)和 strip()(JDK 11 新增),两者核心区别在于对“空白字符”的定义不同:trim 只处理 ASCII 空格(U+0020),而 strip 基于 Unicode 标准识别更广义的空白(如全角空格、换行符、制表符、零宽空格等)。
trim():兼容老版本,但范围有限
trim() 是最常用的方法,它会移除字符串开头和结尾的所有 ASCII 空格字符('\u0020'),不处理其他 Unicode 空白(比如 '\u3000' 全角空格、'\t'、'\n'、'\r' 等在某些情况下也不一定被识别为“trim 可处理的空白”——注意:实际中 trim 会移除 '\t'、'\n'、'\r'、'\f',但仅限于这 5 个控制字符,且不包含其他 Unicode 空白)。
示例:
-
" hello ".trim()→"hello" -
"\t\n world\r\n".trim()→"world"(因为 '\t'、'\n'、'\r'、'\f' 属于 trim 定义的“首尾空白”) -
" hello ".trim()(全角空格 U+3000)→" hello "(不变,trim 不识别全角空格)
strip():推荐新项目使用,Unicode 感知更准确
strip() 是 JDK 11 引入的现代替代方案,底层调用 Character.isWhitespace(int),严格遵循 Unicode 标准,能正确识别包括全角空格(U+3000)、不间断空格(U+00A0)、零宽空格(U+200B)等在内的所有 Unicode 空白字符。
示例:
-
" hello ".strip()→"hello" -
" hello ".strip()(全角空格)→"hello" -
"\u200Btest\u200B".strip()(零宽空格)→"test"
stripLeading() 和 stripTrailing():精准控制方向
JDK 11 还提供了两个配套方法,用于只处理一端:
-
" abc".stripLeading()→"abc"(仅去左边) -
"def ".stripTrailing()→"def"(仅去右边) - 它们同样基于 Unicode,比
trim().substring(...)更安全、语义更清晰
注意事项与建议
- 如果项目运行在 JDK 11+,优先用
strip()替代trim(),尤其涉及国际化、用户输入或富文本场景 -
trim()不会抛异常,对null调用会触发NullPointerException,使用前务必判空;strip()同理 - 二者都返回新字符串(String 不可变),原字符串不受影响
- 若需去除特定字符(如只去 'x' 或多个指定符号),可用
replaceAll("^x+|x+$", "")或第三方库(如 Apache Commons Lang 的StringUtils.strip(...))
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











