¿Cuál sería la diferencia entre la implementación de reemplazo de Java 1.4.2 y la implementación de Apache 2.3? ¿Hay un rendimiento ganar uno sobre el otro?Apache StringUtils vs implementación de Java de replace()
Respuesta
El método String.replace()
que ha vinculado toma dos valores de char
, por lo que solo reemplaza el carácter con otro (posiblemente varias veces).
El método StringUtils.replace()
por otro lado toma String
valores como la cadena de búsqueda y el reemplazo, por lo que puede reemplazar subcadenas más largas. El método comparable en Java sería replaceAll()
. replaceAll()
es probable que sea más lento que el método StringUtils
, porque admite expresiones regulares y, por lo tanto, introduce la sobrecarga de compilar primero la cadena de búsqueda y ejecutar una búsqueda de expresiones regulares.
Tenga en cuenta que Java 5 introdujo String.replace(CharSequence, CharSequence)
que hace lo mismo que StringUtils.replace(String,String)
(excepto que lanza una NullPointerException
si alguno de sus argumentos son null
). Tenga en cuenta que CharSequence
es una interfaz implementada por String
, por lo que puede usar objetos antiguos simples String
aquí.
+1 para señalar que java.lang.String.replaceAll (...) usa expresiones regulares y es lento. El algoritmo utilizado por StringUtils.replace (...) es muy superior y supera a replaceAll() –
@JoachimSauer, el la respuesta en http://stackoverflow.com/a/4874768/910201 menciona '.replaceEach()', pero ¿de dónde viene? No tengo acceso a dicho método y he intentado importar 'org.springframework. util.StringUtils', 'org.apache.soap.util.StringUtils',' org.apache.axis.utils.StringUtils', y 'com.ibm.wsdl.util.StringUtils'. – Xonatron
@MatthewDoucette: la respuesta está en los comentarios de la respuesta a la que vinculó: Apache Commons-Lang 'StringUtils' desde la Versión 2.4. –
1.4.2 sustituye funciona solamente con argumentos char
mientras que el Apache 2.3 se toma en las cadenas.
Apache es bastante más rápido, si no recuerdo mal. Recomendado.
¿Cómo se puede r? ¿Tiene análisis de referencia o algoritmo? – Bozho
Lo usé en un proyecto después de haber hecho puntos de referencia, sí. Yo ya no los tengo. Pensando en eso, si no era mejor, ¿por qué lo desarrollarían? ¿Quién agregará una opción 'replace()' más lenta al proyecto String Utils? :-) – Brian
en 1.4.2 no había un 'String.replace (string, string)'. Entonces fue necesario en bienes comunes. Luego 1.5 lo agregó. – Bozho
String.replace(char, char)
no puede reemplazar cadenas enteras- que puede tener valores
null
conStringUtils.replace(..)
.
String.replace(CharSequence s1, CharSequence s2)
harán lo mismo si la primera cadena no es nula. De lo contrario será lanzar una NullPointerException
¡Anotado con anotaciones y gracias! –
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;
}
}
Tiempo empleado: 6400
Tiempo empleado: 5888
Los tiempos son casi lo mismo!
He editado el código para omitir los gastos generales de replace2
que no se debieron a la implementación de JDK.
Para reemplazar un carácter de cadena con otra cadena usando StringUtil.Replace
, traté de seguir y me está funcionando bien para reemplazar varios valores de cadena de una sola cadena.
String info = "[$FIRSTNAME$]_[$LASTNAME$]_[$EMAIL$]_[$ADDRESS$]";
String replacedString = StringUtil.replace(info, new String[] { "[$FIRSTNAME$]","[$LASTNAME$]","[$EMAIL$]","[$ADDRESS$]" }, new String[] { "XYZ", "ABC" ,"[email protected]" , "ABCD"});
Esto reemplazará el valor de cadena de información con el nuevo valor proporcionado ...
- 1. Implementación de Java REST: Jersey vs CXF
- 2. StringUtils en javascript
- 3. Apache Shiro vs API nativas Java EE
- 4. Apache-ssl vs mod_ssl
- 5. Apache Wicket vs Apache Click
- 6. Implementación SQL Server 2005 de MySQL REPLACE INTO?
- 7. GWT vs Apache Wicket
- 8. Java String replace no funciona
- 9. Implementación de Apache Wink y Apache CXF JAX-RS
- 10. implementación de diff en Java
- 11. mg4j vs. apache lucene
- 12. JAXB vs Apache XMLBeans
- 13. Comparador vs Apache BeanComparator
- 14. Netty vs Apache MINA
- 15. LiteSpeed vs Apache httpd
- 16. ¿Por qué la clase StringUtils Apache no se reconoce en Android?
- 17. Cherrypy vs. Apache/mod_wsgi
- 18. Velocity vs Apache Tiles
- 19. Implementación de KDTree en Java
- 20. Pruebas de rendimiento de Apache vs nodejs
- 21. Implementación de Java Primitive
- 22. Implementación de archivos Java
- 23. Diferencia entre la implementación del módulo en Python Vs Java
- 24. ¿Implementación de R-tree compatible con Java?
- 25. Clase StringUtils que no funciona en Android
- 26. Implementación de Django: Corte de la parte superior de Apache
- 27. Implementación de Java de ... ¿JVM?
- 28. Implementación de OCR de Java
- 29. Javascript replace() no funciona en VS - carácter desconocido
- 30. ¿Hay una implementación de código abierto de Java de R2RML?
¿Existe una razón específica que estés preguntando por una versión antigua de Java? –
Hola Jochim, estoy sorprendido con una antigua versión de Java que debo mantener. :( –
Tenga en cuenta que 'String.replace (CharSequence, CharSequence)' utiliza regexp internamente. :(Vea http://stackoverflow.com/questions/16228992/commons-lang-stringutils-replace-performance-vs-string-replace – Vadzim