Java中LTRIM和RTRIM的一个很好的替代品是什么?

时间:2013-03-22 09:38:15

标签: java string trim

Java中的ltrim()rtrim()函数有什么好的选择?

7 个答案:

答案 0 :(得分:47)

使用正则表达式,您可以写:

String s = ...
String ltrim = s.replaceAll("^\\s+","");
String rtrim = s.replaceAll("\\s+$","");

如果您经常这样做,您可以创建并编译模式以获得更好的性能:

private final static Pattern LTRIM = Pattern.compile("^\\s+");

public static String ltrim(String s) {
    return LTRIM.matcher(s).replaceAll("");
}

从性能角度来看,快速微观基准显示(发布JIT编译后)正则表达式方法比循环慢大约5倍(0.49s与100万ltrim的0.11s)。

我个人认为正则表达式方法更具可读性且不易出错,但如果性能问题,则应使用循环解决方案。

答案 1 :(得分:29)

使用正则表达式可能不错,但它比简单的修剪功能慢得多:

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

来源:http://www.fromdev.com/2009/07/playing-with-java-string-trim-basics.html

此外,还有一些提供此类功能的库。例如,Spring StringUtils。 Apache Commons StringUtils也提供类似的功能:strip, stripStart, stripEnd

StringUtils.stripEnd("abc  ", null)    = "abc"

答案 2 :(得分:7)

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*/" ");
}

答案 3 :(得分:3)

您可以尝试以下操作

String s = "  Hello world  "

String ltrim = s.stripLeading();

String rtrim = s.stripTrailing();

答案 4 :(得分:1)

基于@bezmax的答案,我看了一下Spring StringUtils,但它无法证明切换到Spring框架的重载是正确的。因此,我决定创建一个Characters类,以便为任何给定的字符(-class)轻松地左/右修剪字符串。该课程可在GitHub上找到。

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

如果您想修剪空格,可以使用预定义的字符类:

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

该课程还有其他类型的角色操作,例如condensereplacesplit

答案 5 :(得分:1)

Guava有CharMatcher trimLeadingFrom和trimTrailingFrom

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

答案 6 :(得分:0)

可能会便宜一些,但是您也可以在没有其他任何库的情况下使用它们:

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   "

我承认ltrimmed并不漂亮,但是可以解决问题。