在 Java 中,你可以使用多种方法来去掉字符串中的空格,以下是几种常见的方法,并附有代码示例和解释。

使用 String.replaceAll()
这是最直接和常用的方法。replaceAll() 方法使用正则表达式来替换字符串中的内容。
replaceAll("\\s", ""):去掉所有空白字符,包括空格 (`)、制表符 (\t)、换行符 (\n)、回车符 (\r`) 等。replaceAll(" ", ""):只去掉空格,但保留其他空白字符。
示例代码
public class RemoveSpaces {
public static void main(String[] args) {
String strWithSpaces = " Hello Java World! \t\n";
// 1. 去掉所有空白字符(包括空格, \t, \n, \r 等)
String noAllWhitespace = strWithSpaces.replaceAll("\\s", "");
System.out.println("原始字符串: '" + strWithSpaces + "'");
System.out.println("去掉所有空白字符后: '" + noAllWhitespace + "'"); // 输出: 'HelloJavaWorld!'
// 2. 只去掉空格,保留其他空白字符
String noSpaces = strWithSpaces.replaceAll(" ", "");
System.out.println("只去掉空格后: '" + noSpaces + "'"); // 输出: 'Hello Java\t\n'
}
}
注意:在正则表达式中,\s 是一个特殊字符,代表任何空白字符,在 Java 字符串中,反斜杠 \ 本身也是一个转义字符,所以你需要写成 \\s 才能代表正则表达式中的 \s。
使用 String.replace()
replace() 方法也用于替换字符串,但它不使用正则表达式,它只会精确匹配你提供的字符序列。
replace(" ", ""):只替换掉空格,如果你想替换所有空白字符,你需要手动列出它们。
示例代码
public class RemoveSpacesWithReplace {
public static void main(String[] args) {
String strWithSpaces = " Hello Java World! \t\n";
// 只去掉空格
String noSpaces = strWithSpaces.replace(" ", "");
System.out.println("原始字符串: '" + strWithSpaces + "'");
System.out.println("只去掉空格后: '" + noSpaces + "'"); // 输出: 'Hello Java\t\n'
// 如果要去掉所有空白字符,需要逐个替换
String noAllWhitespace = strWithSpaces.replace(" ", "")
.replace("\t", "")
.replace("\n", "")
.replace("\r", "");
System.out.println("手动去掉所有空白字符后: '" + noAllWhitespace + "'"); // 输出: 'HelloJavaWorld!'
}
}
使用 StringBuilder 或 StringBuffer (手动遍历)
这种方法效率更高,尤其是在处理非常大的字符串时,因为它避免了创建多个中间字符串对象。
示例代码
public class RemoveSpacesManually {
public static void main(String[] args) {
String strWithSpaces = " Hello Java World! \t\n";
StringBuilder sb = new StringBuilder();
for (int i = 0; i < strWithSpaces.length(); i++) {
char ch = strWithSpaces.charAt(i);
// 如果字符不是空格,就添加到 StringBuilder 中
if (ch != ' ') {
sb.append(ch);
}
}
String result = sb.toString();
System.out.println("原始字符串: '" + strWithSpaces + "'");
System.out.println("使用StringBuilder处理后: '" + result + "'"); // 输出: 'Hello Java\t\n'
}
}
如何修改以去掉所有空白字符?
只需修改 if 条件,使用 Character.isWhitespace(ch) 方法,它可以判断字符是否为任何空白字符。
// 修改后的循环
for (int i = 0; i < strWithSpaces.length(); i++) {
char ch = strWithSpaces.charAt(i);
// 如果字符不是任何空白字符,就添加到 StringBuilder 中
if (!Character.isWhitespace(ch)) {
sb.append(ch);
}
}
// 输出: 'HelloJavaWorld!'
使用 Java 8+ 的 Stream API (函数式风格)
如果你使用的是 Java 8 或更高版本,可以使用 Stream API 来实现,代码更简洁。
示例代码
import java.util.stream.Collectors;
public class RemoveSpacesWithStream {
public static void main(String[] args) {
String strWithSpaces = " Hello Java World! \t\n";
// 去掉所有空白字符
String noAllWhitespace = strWithSpaces.chars() // 获取字符流
.filter(c -> !Character.isWhitespace(c)) // 过滤掉空白字符
.mapToObj(c -> String.valueOf((char) c)) // 将 int 转换为 String
.collect(Collectors.joining()); // 连接所有字符串
// 只去掉空格
String noSpaces = strWithSpaces.chars()
.filter(c -> c != ' ')
.mapToObj(c -> String.valueOf((char) c))
.collect(Collectors.joining());
System.out.println("原始字符串: '" + strWithSpaces + "'");
System.out.println("使用Stream去掉所有空白字符后: '" + noAllWhitespace + "'"); // 输出: 'HelloJavaWorld!'
System.out.println("使用Stream只去掉空格后: '" + noSpaces + "'"); // 输出: 'Hello Java\t\n'
}
}
总结与选择建议
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
replaceAll("\\s", "") |
代码最简洁,功能强大(可处理所有空白) | 使用正则表达式,性能略低于 replace |
首选推荐,绝大多数情况下使用这个。 |
replace(" ", "") |
不使用正则表达式,性能较好 | 只能替换空格,不能处理 \t, \n 等 |
当你确定只需要移除空格时使用。 |
StringBuilder |
性能最高,尤其适合超大字符串 | 代码稍显冗长,不如前两种方法简洁 | 在性能要求极高的场景,或需要复杂逻辑处理每个字符时。 |
Stream API |
代码简洁,函数式风格,易于并行处理 | 对于简单任务,可能有点“杀鸡用牛刀”,性能不如 StringBuilder |
适合已经使用 Stream 的项目,或喜欢函数式编程风格的开发者。 |
对于绝大多数日常开发任务,str.replaceAll("\\s", "") 是最简单、最直接、最推荐的方法,如果你明确只需要去掉空格,可以使用 str.replace(" ", "")。
