Apache StringUtils与Java实现的replace()

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

Java 1.4.2替换

Apache 2.3替换

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

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

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

请注意,Java 5引入了String.replace(CharSequence, CharSequence) ,它与StringUtils.replace(String,String)执行相同的操作(除非它的任何参数为null ,否则抛出NullPointerException )。 请注意, CharSequenceString实现的接口,因此您可以在此处使用普通的旧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替换仅使用char参数进行操作,而Apache 2.3则使用字符串。

  • String.replace(char, char)不能替换整个字符串
  • 您可以使用StringUtils.replace(..) null值。

如果第一个字符串不为null String.replace(CharSequence s1, CharSequence s2)将执行相同的操作。 否则会抛出NullPointerException

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

要使用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值…

Interesting Posts