Java1.4.2のreplaceの実装とApache2.3の実装の違いは何でしょうか。パフォーマンスが互いに向上しますか?
6 に答える
リンクしたString.replace()
メソッドは2つの値を取るchar
ため、文字が別の文字に置き換えられるだけです(ただし、複数回実行される可能性があります)。
StringUtils.replace()
一方、このメソッドString
は検索文字列と置換として値を受け取るため、より長い部分文字列を置換できます。
Javaでの同等のメソッドはですreplaceAll()
。このメソッドは正規表現をサポートしているため、最初に検索文字列をコンパイルして正規表現検索を実行するオーバーヘッドが発生するため、このメソッドreplaceAll()
よりも低速になる可能性があります。StringUtils
String.replace(CharSequence, CharSequence)
と同じことを行うJava5が導入されたことに注意してください(引数のいずれかがである場合StringUtils.replace(String,String)
にをスローすることを除いて)。これはによって実装されたインターフェイスであるため、ここでプレーンオールドオブジェクトを使用できることに注意してください。NullPointerException
null
CharSequence
String
String
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の実装によるものではないオーバーヘッドを削除しました。
1.4.2 replacesはchar
引数でのみ動作しますが、Apache2.3は文字列を取り込みます。
String.replace(char, char)
文字列全体を置き換えることはできませんnull
で値を指定できますStringUtils.replace(..)
。
String.replace(CharSequence s1, CharSequence s2)
最初の文字列がnullでない場合も、同じことを行います。それ以外の場合は、NullPointerException
正しく思い出せば、Apacheの方がかなり高速です。おすすめされた。
を使用して文字列文字を別の文字列に置き換えるには、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の文字列値が新しく提供された値に置き換えられます...