Apache StringUtils与Java实现的replace()

时间:2011-08-10 13:58:29

标签: java replace apache-stringutils

Java 1.4.2的replace实现和Apache 2.3的实现有什么区别?是否有性能上升?

Java 1.4.2 replace

Apache 2.3 replace

6 个答案:

答案 0 :(得分:17)

您链接到的String.replace()方法需要两个char值,因此它只会将字符替换为另一个(可能多次,但是)。

另一方面StringUtils.replace()方法将String值作为搜索字符串和替换值,因此它可以替换更长的子字符串。

Java中的可比方法是replaceAll()replaceAll()可能比StringUtils方法慢,因为它支持正则表达式,因此会引入首先编译搜索字符串并运行正则表达式搜索的开销。

请注意,Java 5引入了String.replace(CharSequence, CharSequence),其作用与StringUtils.replace(String,String)完全相同(但如果其任何参数为NullPointerException则抛出null除外)。请注意,CharSequence是由String实现的界面,因此您可以在此处使用普通的旧String对象。

答案 1 :(得分: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的实现。

答案 2 :(得分:2)

1.4.2替换只能用char个参数进行操作,而Apache 2.3用于字符串。

答案 3 :(得分:1)

  • String.replace(char, char)无法替换整个字符串
  • 您可以使用null获得StringUtils.replace(..)个值。
如果第一个字符串不为null,

String.replace(CharSequence s1, CharSequence s2)将执行相同的操作。否则会抛出NullPointerException

答案 4 :(得分:0)

如果我没记错的话,Apache的速度要快得多。推荐使用。

答案 5 :(得分:0)

要使用StringUtil.Replace将字符串字符替换为另一个字符串,我尝试了以下操作,我可以从单个字符串替换多个字符串值。

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的String值...