How to remove only trailing spaces of a string in Java and keep leading spaces?
Solution 1:
Since JDK 11
If you are on JDK 11 or higher you should probably be using stripTrailing().
Earlier JDK versions
Using the regular expression \s++$
, you can replace all trailing space characters (includes space and tab characters) with the empty string (""
).
final String text = " foo ";
System.out.println(text.replaceFirst("\\s++$", ""));
Output
foo
Online demo.
Here's a breakdown of the regex:
-
\s
– any whitespace character, -
++
– match one or more of the previous token (possessively); i.e., match one or more whitespace character. The+
pattern is used in its possessive form++
, which takes less time to detect the case when the pattern does not match. -
$
– the end of the string.
Thus, the regular expression will match as much whitespace as it can that is followed directly by the end of the string: in other words, the trailing whitespace.
The investment into learning regular expressions will become more valuable, if you need to extend your requirements later on.
References
- Java regular expression syntax
Solution 2:
Another option is to use Apache Commons StringUtils
, specifically StringUtils.stripEnd
String stripped = StringUtils.stripEnd(" my lousy string "," ");
Solution 3:
I modified the original java.lang.String.trim()
method a bit and it should work:
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 test = new Test();
String sample = " Hello World "; // A String with trailing and leading spaces
System.out.println(test.trim(sample) + " // No trailing spaces left");
Output:
Hello World // No trailing spaces left