What is a good alternative of LTRIM and RTRIM in Java?
Solution 1:
With a regex you could write:
String s = ...
String ltrim = s.replaceAll("^\\s+","");
String rtrim = s.replaceAll("\\s+$","");
If you have to do it often, you can create and compile a pattern for better performance:
private final static Pattern LTRIM = Pattern.compile("^\\s+");
public static String ltrim(String s) {
return LTRIM.matcher(s).replaceAll("");
}
From a performance perspective, a quick micro benchmark shows (post JIT compilation) that the regex approach is about 5 times slower than the loop (0.49s vs. 0.11s for 1 million ltrim).
I personally find the regex approach more readable and less error prone but if performance is an issue you should use the loop solution.
Solution 2:
Using regex may be nice, but it's quite a lot slower than a simple trimming functions:
public static String ltrim(String s) {
int i = 0;
while (i < s.length() && Character.isWhitespace(s.charAt(i))) {
i++;
}
return s.substring(i);
}
public static String rtrim(String s) {
int i = s.length()-1;
while (i >= 0 && Character.isWhitespace(s.charAt(i))) {
i--;
}
return s.substring(0,i+1);
}
Source: http://www.fromdev.com/2009/07/playing-with-java-string-trim-basics.html
Also, there are some libraries providing such functions. For example, Spring StringUtils. Apache Commons StringUtils provides similar functions too: strip, stripStart, stripEnd
StringUtils.stripEnd("abc ", null) = "abc"
Solution 3:
import org.apache.commons.lang3.StringUtils;
private String rTrim(String str) {
return StringUtils.stripEnd(str, /*stripChars*/" ");
}
private String lTrim(String str) {
return StringUtils.stripStart(str, /*stripChars*/" ");
}
Solution 4:
You can simply try the following
String s = " Hello world "
String ltrim = s.stripLeading();
String rtrim = s.stripTrailing();
Solution 5:
Guava has CharMatcher trimLeadingFrom and trimTrailingFrom
e.g. CharMatcher.whitespace.trimTrailingFrom(s)