如何在Java中只删除字符串的尾随空格并保留前导空格?

kzj*_*fr0 39 java string android trim

trim()函数删除了尾随空格和前导空格,但是,如果我只想删除字符串的尾随空格,我该怎么办呢?

Mic*_*ann 58

自JDK 11起

如果您使用的是JDK 11或更高版本,则应该使用stripTrailing().


早期的JDK版本

使用正则表达式\s++$,可以用空字符串("")替换所有尾随空格字符(包括空格和制表符).

final String text = "  foo   ";
System.out.println(text.replaceFirst("\\s++$", ""));
Run Code Online (Sandbox Code Playgroud)

产量

  foo
Run Code Online (Sandbox Code Playgroud)

在线演示.

这是正则表达式的细分:

  • \s - 任何空白字符,
  • ++ - 匹配前一个令牌中的一个或多个(占有); 即,匹配一个或多个空白字符.该+图案以其所有格形式使用 ++,当图案不匹配时,花费较少的时间来检测案例.
  • $ - 字符串的结尾.

因此,正则表达式将匹配尽可能多的空格,直接跟随字符串的结尾:换句话说,尾随空格.

如果您需要在以后扩展您的要求,那么对学习正则表达式的投入将变得更有价值.

参考

  • @WChargin感谢您提供正则表达式的细分.我认为更多的人应该跟随你的领导并改进答案. (8认同)

Tim*_*der 11

另一种选择是使用Apache Commons StringUtils,特别是StringUtils.stripEnd

String stripped = StringUtils.stripEnd("   my lousy string    "," ");
Run Code Online (Sandbox Code Playgroud)

  • 毫无疑问,Android可以使用它.你应该导入org.apache.commons.lang3而不是org.apache.commons.lang.它适用于API 19+. (4认同)
  • 我同意.但是,你应该用`android`来标记你的问题,因为`android`不是`Java`. (2认同)

Ahm*_*mad 10

java.lang.String.trim()稍微修改了原始方法,它应该工作:

  public String trim(String str) {
        int len = str.length();
        int st = 0;

        char[] val = str.toCharArray();

        while ((st < len) && (val[len - 1] <= ' ')) {
            len--;
        }
        return str.substring(st, len);
    }
Run Code Online (Sandbox Code Playgroud)

测试:

  Test test = new Test();
  String sample = "            Hello World               "; // A String with trailing and leading spaces
  System.out.println(test.trim(sample) + " // No trailing spaces left");
Run Code Online (Sandbox Code Playgroud)

输出:

        Hello World // No trailing spaces left
Run Code Online (Sandbox Code Playgroud)


Ous*_* D. 7

截至JDK11您可以使用stripTrailing

String result = str.stripTrailing();
Run Code Online (Sandbox Code Playgroud)