杰瑞科技汇

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

去掉字符串首尾的空格(最常用)

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

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

使用 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() + "'");
    }
}

输出:

Java字符串如何高效去掉空格?-图2
(图片来源网络,侵删)
原始字符串: '   Hello World, Java!   '
去掉首尾空格后: 'Hello World, Java!'
原始字符串: '    
    This is a test.     
'
去掉首尾空格后: 'This is a test.'

去掉字符串所有的空格

如果你想去掉字符串中每一个空格(包括中间的空格),可以使用以下几种方法。

使用 String.replace()

replace() 方法可以替换字符串中所有匹配的子串,我们可以用它来替换所有的空格 。

特点:

  • 去掉所有的空格。
  • 简单易读。

示例代码:

Java字符串如何高效去掉空格?-图3
(图片来源网络,侵删)
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", ""),它在性能和可读性之间取得了很好的平衡。

希望这份详细的解释能帮助你!

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