1. 概述

在Java编程中,字符串操作是一项常见任务。有时,多余的尾部空格可能会导致不一致性、增加存储空间,甚至引发意外的错误。

在这个快速教程中,我们将探讨如何有效地只从给定的String中移除尾部空格或空白字符。

2. 问题介绍

首先,让我们创建一个示例输入String

final static String INPUT = "  a b c d e \t  ";

当我们谈论移除尾部空白字符时,可能会想到trim()方法。然而,**trim()方法会移除前后所有的空格字符**:

String result = INPUT.trim();
assertEquals("a b c d e", result);

我们必须保留原始输入中的前导空格。因此,**trim()方法并不能解决我们的问题**。

根据需求,我们可能需要删除所有尾部空格,或者仅删除尾部空格字符。重要的是要明白,空格包括空格和其他字符,如制表符(\t

例如,对于INPUT作为示例,移除其尾部空格后将得到" a b c d e"。相反,如果我们打算只删除INPUT的尾部空格字符,我们期望得到" a b c d e \t"。如您所见,制表符保持不变。

在本教程中,我们将涵盖这两种情况,并讨论不同的解决方案来移除尾部空格或空白。

接下来,我们进入编码部分。

3. 使用正则表达式和replaceAll()方法

在Java中,正则表达式是处理String的强大工具。通过构造匹配尾部连续空格或空白的正则模式,我们可以利用replaceAll()方法有效地解决这个问题。

例如,因为模式" *+$"匹配尾部连续的空格字符,我们可以将此正则模式传递给replaceAll()以删除尾部空格:

String result1 = INPUT.replaceAll(" +$", "");
assertEquals("  a b c d e \t", result1);

如图所示,制表符及其前面的空格保持不变。

同样,**"*\\s+$"**是一个可以删除所有尾部空白的模式:

String result2 = INPUT.replaceAll("\\s+$", "");
assertEquals("  a b c d e", result2); 

4. 使用stripTrailing()方法

在Java 11中,stripTrailing()方法被添加到String类中,作为新增功能。顾名思义,**stripTrailing()方法方便地允许我们移除尾部的空白**:

String result = INPUT.stripTrailing();
assertEquals("  a b c d e", result);

5. 使用Apache Commons Lang 3的stripEnd()

Apache Commons Lang 3是一个广泛使用的库。其StringUtils类提供了丰富的字符串处理实用工具。例如,**stripEnd()方法从输入String中移除指定的尾部字符**。因此,我们可以用它来移除尾部空格:

String result = StringUtils.stripEnd(INPUT, " ");
assertEquals("  a b c d e \t", result);

值得注意的是,由于stripEnd()方法仅接受预定义的String作为stripChars参数,因此我们不能使用这种方法来移除尾部空白字符

6. 总结

在这篇文章中,我们探讨了不同的方法来移除尾部空格或空白。这些解决方案涵盖了Java标准库和外部库Apache Commons Lang 3。

如往常一样,示例代码的完整源代码可以在GitHub上找到。