10

Java1.4.2のreplaceの実装とApache2.3の実装の違いは何でしょうか。パフォーマンスが互いに向上しますか?

Java1.4.2置換

Apache2.3の置き換え

4

6 に答える 6

18

リンクしたString.replace()メソッドは2つの値を取るcharため、文字が別の文字に置き換えられるだけです(ただし、複数回実行される可能性があります)。

StringUtils.replace()一方、このメソッドStringは検索文字列と置換として値を受け取るため、より長い部分文字列を置換できます。

Javaでの同等のメソッドはですreplaceAll()。このメソッドは正規表現をサポートしているため、最初に検索文字列をコンパイルして正規表現検索を実行するオーバーヘッドが発生するため、このメソッドreplaceAll()よりも低速になる可能性があります。StringUtils

String.replace(CharSequence, CharSequence)と同じことを行うJava5が導入されたことに注意してください(引数のいずれかがである場合StringUtils.replace(String,String)にをスローすることを除いて)。これはによって実装されたインターフェイスであるため、ここでプレーンオールドオブジェクトを使用できることに注意してください。NullPointerExceptionnullCharSequenceStringString

于 2011-08-10T14:01:52.640 に答える
3
public class Compare {

    public static void main(String[] args) {
        StringUtils.isAlphanumeric(""); // Overhead of static class initialization for StringUtils
        String key = "0 abcdefghijklmno" + Character.toString('\n') + Character.toString('\r');

        String key1 = replace1(key);
        String key2 = replace2(key);
    }


    private static String replace1(String key) {
        long start = System.nanoTime();
        key = StringUtils.replaceChars(key, ' ', '_');
        key = StringUtils.replaceChars(key, '\n', '_');
        key = StringUtils.replaceChars(key, '\r', '_');
        long end = System.nanoTime() - start;
        System.out.println("Time taken : " + end);
        return key;
    }

    public static String replace2(String word) {
        long start = System.nanoTime();
        char[] charArr = word.toCharArray();

        int length = charArr.length;
        for (int i = 0; i < length; i++) {
            if (charArr[i] == ' ' || charArr[i] == '\n' || charArr[i] == '\r') {
                charArr[i] = '_';
            }
        }

        String temp = new String(charArr);
        long end = System.nanoTime() - start;
        System.out.println("Time taken : " + end);
        return temp;
    }
}

所要時間:6400

所要時間:5888

時間はほぼ同じです!

コードを編集してreplace2、JDKの実装によるものではないオーバーヘッドを削除しました。

于 2012-11-13T19:53:35.207 に答える
2

1.4.2 replacesはchar引数でのみ動作しますが、Apache2.3は文字列を取り込みます。

于 2011-08-10T14:00:48.720 に答える
1
  • String.replace(char, char)文字列全体を置き換えることはできません
  • nullで値を指定できますStringUtils.replace(..)

String.replace(CharSequence s1, CharSequence s2)最初の文字列がnullでない場合も、同じことを行います。それ以外の場合は、NullPointerException

于 2011-08-10T14:04:40.190 に答える
0

正しく思い出せば、Apacheの方がかなり高速です。おすすめされた。

于 2011-08-10T14:02:00.470 に答える
0

を使用して文字列文字を別の文字列に置き換えるには、StringUtil.Replace以下を試してみましたが、1つの文字列から複数の文字列値を置き換えることができました。

String info = "[$FIRSTNAME$]_[$LASTNAME$]_[$EMAIL$]_[$ADDRESS$]";

String replacedString = StringUtil.replace(info, new String[] { "[$FIRSTNAME$]","[$LASTNAME$]","[$EMAIL$]","[$ADDRESS$]" }, new String[] { "XYZ", "ABC" ,"abc@abc.com" , "ABCD"});

これにより、infoの文字列値が新しく提供された値に置き換えられます...

于 2017-04-28T05:46:11.073 に答える