如何只删除Java中的string尾部空格,并保持领先的空格?

trim()函数删除拖尾和前导空格,但是,如果我只想删除string的尾部空格,我该怎么做?

谢谢!

使用正则expression式\s++$ ,可以用空格( "" )replace所有尾部空格字符(包括空格和制表符)。

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

产量

  foo 

在线演示。

这里是正则expression式的细分:

  • \s – 任何空格字符,
  • ++ – 匹配以前的一个或多个令牌(占有); 即匹配一个或多个空格字符。 +模式以占有forms ++ ,当模式不匹配时花费较less的时间来检测情况。
  • $ – string的结尾。

因此,正则expression式将匹配尽可能多的空白,直接跟在string末尾:换句话说,尾随的空白。

如果您以后需要扩展您的需求,那么投入学习正则expression式将会变得更有价值。

参考

  • Java正则expression式语法

另一种select是使用Apache Commons的StringUtils ,特别是StringUtils.stripEnd

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

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

testing:

  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 

最实际的答案是@ Micha's, Ahmad's与你想要的是相反的,但是如果你不想使用陌生的工具或者看到一个具体的方法的话,这就是我想出来的。

 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| 

我认为最好的方法是:

 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; } 

这不会分配任何临时对象来执行该任务,并且比使用正则expression式更快。 它也删除所有的空格,而不是“”。

这是一个非常简短,高效且易于阅读的版本:

 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)如果你想使用更广泛的空白定义。

string值=“欢迎使用java”;

所以我们可以使用

value = value.trim();

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

trimTrailingWhitespace

此代码旨在通过使用描述性名称(并避免正则expression式)尽可能轻松地进行读取。

它使用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); }