What is a good alternative of LTRIM and RTRIM in Java?

JavaStringTrim

Java Problem Overview


What is a good alternative of JavaScript ltrim() and rtrim() functions in Java?

Java Solutions


Solution 1 - Java

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 - Java

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 - Java

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 - Java

You can simply try the following

String s = "  Hello world  "

String ltrim = s.stripLeading();

String rtrim = s.stripTrailing();

Solution 5 - Java

Guava has CharMatcher trimLeadingFrom and trimTrailingFrom

e.g. CharMatcher.whitespace.trimTrailingFrom(s)

Solution 6 - Java

Based on the answer of @bezmax I had a look at the Spring StringUtils, but it couldn't justify the overload for me of switching to the Spring framework. Therfore I decided to create a Characters class to easily left / right trim strings for any given character(-class). The class is available on GitHub.

Characters.valueOf('x').trim( ... )
Characters.valueOf('x').leftTrim( ... )
Characters.valueOf('x').rightTrim( ... )

If you would like to trim for whitespaces, there is a predefined character-class available:

Characters.WHITESPACE.trim( ... )
Characters.WHITESPACE.leftTrim( ... )
Characters.WHITESPACE.rightTrim( ... )

The class does feature also other kinds of character operations, such condense, replace or split.

Solution 7 - Java

Might be a bit cheap, but you might also use these without any other library:

final var string = "   Hello World   ";

final var rtrimmed = ("." + string).trim().substring(1);
// => "   Hello World"

var ltrimmed = (string + ".").trim();
ltrimmed = ltrimmed.substring(0, ltrimmed.length - 1);
// => "Hello World   "

I admit, that the ltrimmed is not that pretty, but it will do the trick.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionyegor256View Question on Stackoverflow
Solution 1 - JavaassyliasView Answer on Stackoverflow
Solution 2 - JavabezmaxView Answer on Stackoverflow
Solution 3 - JavaYAAView Answer on Stackoverflow
Solution 4 - Javauser3601193View Answer on Stackoverflow
Solution 5 - JavaAndrew McKinlayView Answer on Stackoverflow
Solution 6 - JavaKristian KraljicView Answer on Stackoverflow
Solution 7 - JavaTharabasView Answer on Stackoverflow