杰瑞科技汇

Java字符串如何高效去除空格?

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

Java字符串如何高效去除空格?-图1
(图片来源网络,侵删)

使用 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!'
    }
}

使用 StringBuilderStringBuffer (手动遍历)

这种方法效率更高,尤其是在处理非常大的字符串时,因为它避免了创建多个中间字符串对象。

示例代码

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(" ", "")

分享:
扫描分享到社交APP
上一篇
下一篇