58

Javaの JavaScriptltrim()rtrim()関数の良い代替手段は何ですか?

4

7 に答える 7

62

正規表現を使用すると、次のように記述できます。

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 倍遅いことを示しています (100 万 ltrim で 0.49 秒対 0.11 秒)。

個人的には、正規表現のアプローチの方が読みやすく、エラーが発生しにくいと思いますが、パフォーマンスが問題になる場合は、ループ ソリューションを使用する必要があります。

于 2013-03-22T09:40:28.920 に答える
34

正規表現を使用するのは良いことかもしれませんが、単純なトリミング機能よりもかなり遅くなります。

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

また、そのような機能を提供するいくつかのライブラリがあります。たとえば、SpringStringUtils。Apache Commons StringUtilsも同様の機能を提供します:strip、stripStart、stripEnd

StringUtils.stripEnd("abc  ", null)    = "abc"
于 2013-03-22T09:47:39.877 に答える
10
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*/" ");
}
于 2016-06-22T20:55:54.250 に答える