在 Java 開發中,處理字串空白是常見需求。根據業務場景不同,可能需要移除首尾空格、所有空格,甚至包含製表符、換行符等不可見空白字元。本文整理四種核心方法,並說明適用場景與效能差異。
trim() —— 僅移除首尾空格最基礎的方法,只會刪除字串開頭與結尾的空白字元(空格、Tab、換行等),中間的空白保持不變。
String str = " Hello World ";
String result = str.trim(); // "Hello World"
適用場景:表單輸入前後端去除多餘空白、日誌清理等。
replace(" ", "") —— 移除所有半形空格使用 String.replace(CharSequence, CharSequence) 可將所有半形空格(U+0020)替換為空字串,但無法處理全形空格、Tab、換行等。
String str = " H e l l o ";
String result = str.replace(" ", ""); // "Hello"
注意:此方法不支援正則表達式,效能優於 replaceAll。
replaceAll("\\s+", "") —— 移除所有空白字元(推薦)\\s 是正則表達式的空白字元類別,涵蓋:
\t\n / \r\f (視 JVM 實作而定)+ 表示一次匹配一個或多個連續空白,避免重複替換提升效能。
String str = " Hello\tWorld\n";
String result = str.replaceAll("\\s+", ""); // "HelloWorld"
適用場景:資料清洗、序列化前處理、比對不含空白的字串。
replaceAll("\\s*", "") —— 兼容零寬空白* 代表零次或多次,理論上可處理零寬空白(Zero-width space),但實務上 \\s+ 已足夠。若字串極長,+ 效能更佳。
| 方法 | 處理範圍 | 正則支援 | 相對效能 |
|---|---|---|---|
trim() | 首尾 | 否 | 最高 |
replace(" ", "") | 所有半形空格 | 否 | 高 |
replaceAll("\\s+", "") | 所有空白字元 | 是 | 中 |
replaceAll("\\s*", "") | 所有空白字元(含零寬) | 是 | 中偏低 |
最佳實務:
• 僅需去首尾 → trim()
• 只去半形空格且追求極致速度 → replace(" ", "")
• 通用移除所有空白 → replaceAll("\\s+", "")