String.trim()用于去除字符串首尾Unicode空白字符,返回新字符串;不修改原串,不处理null、全角空格及中间空格;安全用法需判空,如Objects.toString(userInput, "").trim()。

String.trim() 是 Java 中最直接、轻量的方式,用于去除字符串首尾的空白字符(包括空格、制表符 、换行符
、回车符
等 Unicode 空白字符)。
trim() 的基本用法和注意事项
它不会修改原字符串(String 不可变),而是返回一个新字符串。若原字符串首尾无空白,就返回自身引用;若全为空白,则返回空字符串 ""。
示例:
String input = " Hello World "; String cleaned = input.trim(); // 结果为 "Hello World"
- 只处理首尾,中间空格完全保留(如
"a b"→"a b") - 对
null调用会抛出NullPointerException,务必先判空 - 不处理全角空格(如中文输入法下的空格)、零宽字符等,仅识别 Unicode 标准空白(
Character.isWhitespace(c)为 true 的字符)
安全使用 trim() 的推荐写法
用户输入常为 null 或空串,建议结合空值检查与空串判断:
立即学习“Java免费学习笔记(深入)”;
String userInput = request.getParameter("username");
String safeInput = (userInput == null) ? "" : userInput.trim();
// 或更简洁地用 Objects.toString(Java 7+)
String safeInput = Objects.toString(userInput, "").trim();
- 避免直接链式调用
request.getParameter(...).trim(),以防 NPE - 若需进一步校验非空,可紧接着判断:
if (!safeInput.isEmpty()) { ... } - Web 表单场景中,常在 Controller 或 DTO setter 中统一 trim,避免重复逻辑
当 trim() 不够用时:需要处理中间空格或特殊空白
如果业务要求“多个连续空格压缩为一个”或“去掉全角空格”,trim() 就不够了,需配合正则或其他工具:
- 压缩中间多余空格:
str.replaceAll("\s+", " ").trim() - 同时清理全角空格(U+3000):
str.replaceAll("[\su3000]+", " ").trim() - 更健壮的方案:用 Apache Commons Lang 的
StringUtils.trimToEmpty()或StringUtils.normalizeSpace()
实际 Web 输入处理的小建议
用户粘贴内容常带不可见字符,单纯 trim() 可能遗漏:
- 前端也可加
onblur="this.value=this.value.trim()"做初步过滤(但不能替代后端校验) - 后端建议记录原始输入与清洗后结果,便于排查异常(如用户声称“没输空格”但登录失败)
- 密码字段一般不 trim —— 多余空格可能是用户本意(如密码含空格),应明确提示而非静默处理


















