如何删除Java中的字符串的只有尾部的空格,并保持领先的空间?

问题描述 投票:37回答:10

trim()功能将同时删除尾随和前导空格,但是,如果我只是想删除一个字符串的尾随空格,我该怎么办呢?

java android string trim
10个回答
58
投票

Since JDK 11

如果您在JDK 11或更高版本,你或许应该使用stripTrailing()


Earlier JDK versions

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

final String text = "  foo   ";
System.out.println(text.replaceFirst("\\s++$", ""));

产量

  foo

Online demo.

这里的正则表达式的细分:

  • \s - 任何空白字符,
  • ++ - 匹配一个或多个先前的令牌(占有性);即,匹配的一个或多个空白字符。所述+图案在其possessive form ++,这需要更少的时间来检测的情况下,当模式不匹配使用。
  • $ - 字符串的结尾。

因此,正则表达式匹配,因为它可以直接由所述字符串的末尾,随后尽可能多的空白:换句话说,后空白。

投资到学习正则表达式将变得更有价值,如果您稍后需要延长您的要求。

参考


-1
投票

字符串值=“欢迎到Java”;

因此,我们可以使用

值= value.trim();


11
投票

另一种选择是使用Apache下议院StringUtils,具体StringUtils.stripEnd

String stripped = StringUtils.stripEnd("   my lousy string    "," ");

9
投票

我修改了原来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);
    }

测试:

  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");

输出:

        Hello World // No trailing spaces left

3
投票

最实际的答案是@米莎的, 艾哈迈德的是你想要什么,所以逆转 但这里是我想出了如果你不希望使用不熟悉的工具,或者看一个具体的办法。

public String trimEnd( String myString ) {

    for ( int i = myString.length() - 1; i >= 0; --i ) {
        if ( myString.charAt(i) == ' ' ) {
            continue;
        } else {
            myString = myString.substring( 0, ( i + 1 ) );
            break;
        }
    }
    return myString;
}

使用这样的:

public static void main( String[] args ) {

    String s = "    Some text here   ";
    System.out.println( s + "|" );
    s = trimEnd( s );
    System.out.println( s + "|" );
}

输出:

Some text here   |
Some text here|

2
投票

在我看来,最好的办法:

public static String trimEnd(String source) {
    int pos = source.length() - 1;
    while ((pos >= 0) && Character.isWhitespace(source.charAt(pos))) {
        pos--;
    }
    pos++;
    return (pos < source.length()) ? source.substring(0, pos) : source;
}

这不分配任何临时对象做的工作,是比使用正则表达式快。此外,它删除所有空格,不只是'。


2
投票

这里有一个很短,高效和易于阅读的版本:

public static String trimTrailing(String str) {
    if (str != null) {
        for (int i = str.length() - 1; i >= 0; --i) {
            if (str.charAt(i) != ' ') {
                return str.substring(0, i + 1);
            }
        }
    }
    return str;
}

作为一种替代str.charAt(i) != ' '如果你想使用空格更广泛的定义,你也可以使用!Character.isWhitespace(str.charAt(i)


1
投票

作为JDK11您可以使用stripTrailing

String result = str.stripTrailing();

0
投票

Spring框架提供了一个有用的org.springframework.util.StringUtils。

trimTrailingWhitespace


0
投票

这个代码是为了通过使用描述性的名称(和避免正则表达式)读取的容易成为可能。

它使用Java 8的Optional所以并不适合所有人。

public static String removeTrailingWhitspace(String string) {
    while (hasWhitespaceLastCharacter(string)) {
        string = removeLastCharacter(string);
    }
    return string;
}

private static boolean hasWhitespaceLastCharacter(String string) {
    return getLastCharacter(string)
            .map(Character::isWhitespace)
            .orElse(false);
}

private static Optional<Character> getLastCharacter(String string) {
    if (string.isEmpty()) {
        return Optional.empty();
    }
    return Optional.of(string.charAt(string.length() - 1));
}

private static String removeLastCharacter(String string) {
    if (string.isEmpty()) {
        throw new IllegalArgumentException("String must not be empty");
    }
    return string.substring(0, string.length() - 1);
}
© www.soinside.com 2019 - 2024. All rights reserved.