去掉字符串首尾的空格(最常用)
这是最常见的需求,比如用户输入时可能不小心在前后加了空格,Java 提供了内置方法来处理。

使用 String.trim()
trim() 是最简单、最直接的方法,它会去掉字符串开头和结尾的任何空白字符(包括空格 \u0020、制表符 \t、换行符 \n 等)。
特点:
- 只处理首尾。
- 不会改变字符串中间的空格。
- 如果字符串全部由空格组成,
trim()会返回一个空字符串 。
示例代码:
public class TrimExample {
public static void main(String[] args) {
String strWithSpaces = " Hello World, Java! ";
// 使用 trim() 去掉首尾空格
String trimmedStr = strWithSpaces.trim();
System.out.println("原始字符串: '" + strWithSpaces + "'");
System.out.println("去掉首尾空格后: '" + trimmedStr + "'");
// 另一个例子
String anotherStr = "\t\n \t This is a test. \n\t";
System.out.println("\n原始字符串: '" + anotherStr + "'");
System.out.println("去掉首尾空格后: '" + anotherStr.trim() + "'");
}
}
输出:

原始字符串: ' Hello World, Java! '
去掉首尾空格后: 'Hello World, Java!'
原始字符串: '
This is a test.
'
去掉首尾空格后: 'This is a test.'
去掉字符串所有的空格
如果你想去掉字符串中每一个空格(包括中间的空格),可以使用以下几种方法。
使用 String.replace()
replace() 方法可以替换字符串中所有匹配的子串,我们可以用它来替换所有的空格 。
特点:
- 去掉所有的空格。
- 简单易读。
示例代码:

public class ReplaceExample {
public static void main(String[] args) {
String strWithSpaces = "Hello World, Java!";
// 使用 replace() 将所有空格 "" 替换为空字符串 ""
String noSpacesStr = strWithSpaces.replace(" ", "");
System.out.println("原始字符串: '" + strWithSpaces + "'");
System.out.println("去掉所有空格后: '" + noSpacesStr + "'");
}
}
输出:
原始字符串: 'Hello World, Java!'
去掉所有空格后: 'HelloWorld,Java!'
使用 String.replaceAll() + 正则表达式
replaceAll() 方法使用正则表达式进行替换,要去掉所有空格,可以使用正则表达式 \\s。
\\s 代表任何空白字符,包括:
- 空格 ` `
- 制表符
\t - 换行符
\n - 回车符
\r - 换页符
\f
特点:
- 功能更强大,可以一次性去掉所有类型的空白字符。
- 如果只想去掉空格,
replace()更明确。
示例代码:
public class ReplaceAllExample {
public static void main(String[] args) {
String strWithSpaces = "Hello \t World, \n Java!";
// 使用 replaceAll() 和正则表达式 \\s 去掉所有空白字符
String noWhitespaceStr = strWithSpaces.replaceAll("\\s", "");
System.out.println("原始字符串: '" + strWithSpaces + "'");
System.out.println("去掉所有空白字符后: '" + noWhitespaceStr + "'");
}
}
输出:
原始字符串: 'Hello World,
Java!'
去掉所有空白字符后: 'HelloWorld,Java!'
去掉字符串中间多余的连续空格(保留单个空格)
这是一个稍微复杂一点的需求,你想把 "Hello World" 变成 "Hello World",这通常需要使用正则表达式。
方法:使用 String.replaceAll() + 正则表达式
我们可以使用正则表达式 \\s+ 来匹配一个或多个连续的空白字符,然后将它们替换为一个单个空格 。
特点:
- 保留单词之间的单个空格。
- 同时也会去掉首尾的空格,因为
replaceAll会匹配整个字符串。
示例代码:
public class NormalizeSpacesExample {
public static void main(String[] args) {
String strWithMultipleSpaces = " Hello World, this is a test. ";
// 使用正则表达式 \\s+ 匹配一个或多个空白字符,替换为单个空格
String normalizedStr = strWithMultipleSpaces.replaceAll("\\s+", " ").trim();
// 注意:replaceAll 已经会去掉首尾的空白,所以最后加 trim() 是双重保险,但通常可以省略。
// 但为了代码清晰,保留 trim() 可以明确表达“确保首尾无空格”的意图。
System.out.println("原始字符串: '" + strWithMultipleSpaces + "'");
System.out.println("规范化空格后: '" + normalizedStr + "'");
}
}
输出:
原始字符串: ' Hello World, this is a test. '
规范化空格后: 'Hello World, this is a test.'
总结与对比
| 需求 | 推荐方法 | 示例代码 | 说明 |
|---|---|---|---|
| 去掉首尾空格 | String.trim() |
str.trim() |
最简单,最常用,处理所有类型的空白字符。 |
| 去掉所有空格 | String.replace() |
str.replace(" ", "") |
简单直接,只针对空格。 |
| 去掉所有空白字符 | String.replaceAll() |
str.replaceAll("\\s", "") |
功能强大,能去掉空格、制表符、换行符等。 |
| 规范化空格(保留单个) | String.replaceAll() + trim() |
str.replaceAll("\\s+", " ").trim() |
将多个连续空白替换为一个,并清理首尾。 |
性能考虑
对于绝大多数应用场景,上述方法的性能差异可以忽略不计,但如果在性能极其敏感的代码(如高频循环)中处理非常大的字符串,可以考虑以下微优化:
String.replace(char, char)(单字符版本) 通常比String.replace(String, String)(字符串版本) 或replaceAll稍快一些,因为不需要解析正则表达式。
// 理论上最快的去掉所有空格的方法
String noSpacesStr = strWithSpaces.replace(' ', ' ').replace('\t', ' ').replace('\n', ' ').replace('\r', ' ').replace('\f', ' ');
但这种方法代码冗长,可读性差,通常推荐使用 replaceAll("\\s", ""),它在性能和可读性之间取得了很好的平衡。
希望这份详细的解释能帮助你!
