1. 概述

在Java中处理字符串时,我们常常需要移除字符串中的空白字符。本教程将探讨在Java中从字符串中移除空白字符的常见场景。

2. 问题介绍

为了更好地理解问题,让我们先看一个字符串示例:

String myString = "   I    am a    wonderful String     !   ";

上述示例中,myString 变量包含多个前导、尾随空格以及中间的空格字符。通常情况下,我们在Java中处理类似 myString 的字符串时,可能需要满足以下两个要求:

  • 从给定字符串中移除所有空白字符 -> "IamawonderfulString!"
  • 将连续的空格替换为单个空格,并移除所有前导和尾随空格 -> "I am a wonderful String !"

接下来,我们将针对每种情况探讨两种方法:使用String类的便捷replaceAll()方法,以及使用广泛使用的Apache Commons Lang3库中的StringUtils类。

在本教程中,我们将简化讨论,不涉及Unicode字符集中关于空白字符的详细内容(参阅:Unicode空白字符)。此外,我们将使用断言来验证每个解决方案。

现在让我们开始行动起来。

3. 移除字符串中的所有空白字符

3.1. 使用String.replaceAll()

首先,我们将使用replaceAll()方法移除字符串中的所有空白字符。

replaceAll()方法支持正则表达式(regex)。我们可以使用正则表达式字符类\s匹配任何空白字符。通过将输入字符串中的每个空白字符替换为空字符串,即可解决问题:inputString.replaceAll("\\s", "")

接着,我们将创建一个测试用例,检查这个想法是否适用于我们的示例字符串:

String result = myString.replaceAll("\\s", "");
assertThat(result).isEqualTo("IamawonderfulString!");

运行测试后,它通过了。因此,replaceAll()方法解决了问题。接下来,我们将使用Apache Commons Lang3来解决这个问题。

3.2. 使用Apache Commons Lang3库

Apache Commons Lang3库包含一个名为StringUtils的实用工具类,可以方便地操作字符串。

要开始使用Apache Commons Lang 3,我们需要添加Maven依赖项

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.14.0</version>
</dependency>

查看StringUtils类的方法,我们发现有一个名为deleteWhitespace()的方法,名字表明这就是我们需要的。

接下来,我们将使用deleteWhitespace()方法从字符串中移除所有空白字符

String result = StringUtils.deleteWhitespace(myString);
assertThat(result).isEqualTo("IamawonderfulString!");

当执行测试时,它通过了。所以deleteWhitespace()方法完成了任务。

4. 将连续的空格替换为单个空格

4.1. 使用String.replaceAll()

现在来看看另一个场景。这个问题可以通过两步解决:

  • 替换连续的空格为单个空格
  • 对第一步的结果进行修剪

值得一提的是,我们也可以先修剪输入字符串,然后再替换连续的空格。因此,哪一步先做并不重要。

对于第一步,我们仍然可以使用replaceAll()与正则表达式匹配连续的空格字符,并设置单个空格作为替换值。

正则表达式\s+匹配一个或多个空白字符。因此,我们可以调用replaceAll("\\s+", " ")方法完成第一步。然后,我们可以调用String.trim()方法应用修剪操作。

接下来,我们将创建一个测试来检查我们的想法是否能解决问题。为了清晰起见,我们将对这两步分别进行断言:

String result = myString.replaceAll("\\s+", " ");
assertThat(result).isEqualTo(" I am a wonderful String ! ");
assertThat(result.trim()).isEqualTo("I am a wonderful String !");

运行后,测试通过。所以这种方法按预期工作。

最后,我们使用Apache Commons Lang 3库来解决问题。

4.2. 使用Apache Commons Lang3库

StringUtils.normalizeSpace()方法会修剪输入字符串并用单个空格替换连续的空格字符。因此,可以直接调用此方法来解决问题:

String result = StringUtils.normalizeSpace(myString);
assertThat(result).isEqualTo("I am a wonderful String !");

执行测试时,它通过了。如你所见,StringUtils.normalizeSpace()非常直观易用。

5. 总结

在这篇文章中,我们学习了如何在Java中从字符串中移除空白字符。完整的源代码可在GitHub上找到。