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

后端 未结 7 878
既然无缘
既然无缘 2020-12-01 09:16

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

相关标签:
7条回答
  • You can simply try the following

    String s = "  Hello world  "
    
    String ltrim = s.stripLeading();
    
    String rtrim = s.stripTrailing();
    
    0 讨论(0)
  • 2020-12-01 09:34

    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.

    0 讨论(0)
  • 2020-12-01 09:34
    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*/" ");
    }
    
    0 讨论(0)
  • 2020-12-01 09:37

    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.

    0 讨论(0)
  • 2020-12-01 09:38

    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"
    
    0 讨论(0)
  • 2020-12-01 09:42

    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.

    0 讨论(0)
提交回复
热议问题