String.trim()仅清除U+0020及以下的空白字符,包括空格、 、 、 、;无法处理全角空格(U+3000)、零宽字符、不间断空格(U+00A0)及字符串中间空白。

String.trim() 可以快速清除字符串首尾的空白字符,包括空格、制表符( )、换行符(
)、回车符(
)和换页符(),但要注意它只处理 Unicode 中 U+0020 及以下的“空白控制字符”,对某些 Unicode 空格(如全角空格、零宽空格、不间断空格 )无效。
trim() 能处理哪些常见非法字符
Java 的 trim() 方法默认识别并移除以下首尾字符:
- 空格(
' ',U+0020) - 水平制表符(
' ',U+0009) - 换行符(
' ',U+000A) - 回车符(
' ',U+000D) - 换页符(
'',U+000C)
这意味着用户粘贴输入中常见的 "
hello world
" 经 trim() 后会变成 "hello world",满足大多数表单清理需求。
trim() 的局限性需额外注意
以下情况 trim() 无法处理,容易被忽略:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
- 全角空格(U+3000):中文输入法下常误输,
" hello ".trim()结果仍是" hello " - 零宽空格(U+200B)、零宽非连接符(U+200C)等不可见控制符
- 不间断空格(U+00A0):HTML 中常用
生成,trim()不识别 - 字符串中间的多余空格或换行符不会被影响(如
"a b ".trim()→"a b")
更健壮的清理方案(推荐组合使用)
若需兼容国际化输入或高安全要求场景,建议补充处理:
- 用正则替换常见 Unicode 空格:
str.replaceAll("[\u00A0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]+", " ").trim() - 彻底去除所有首尾空白(含全角):
str.replaceAll("^[\s\u3000]+|[\s\u3000]+$", "") - 结合 Apache Commons Lang:
StringUtils.strip(str)(自动支持更多 Unicode 空白) - 对关键字段(如用户名、邮箱)可进一步校验是否为空:
StringUtils.isBlank(str)
实际使用建议
日常开发中,优先使用 trim() 做第一道轻量清理,再根据业务需要决定是否增强:
- 普通表单提交:直接
input.trim()即可 - 用户昵称/搜索关键词:建议加
.replaceAll("\s+", " ").trim()合并内部多空格 - 后台 API 入参校验:在 Bean Validation 中搭配
@NotBlank+ 自定义注解做 Unicode 清理 - 日志或调试输出前:可用
Objects.toString(str, "").trim()防空指针

















