在Java中,LTRIM和RTRIM的好替代品是什么?

2022-08-31 16:52:31

JavaScript和Java中的函数的好替代品是什么?ltrim()rtrim()


答案 1

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

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.49秒,而100万ltrim为0.11秒)。

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


答案 2

使用正则表达式可能很好,但它比简单的修剪函数慢得多:

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"