Puedo usar esto:
String str = "TextX Xto modifyX";
str = str.replace('X','');//that does not work because there is no such character ''
¿Hay alguna manera de eliminar todas las apariciones de caracteres X
de una Cadena en Java?
Intenté esto y no es lo que quiero: str.replace('X',' '); //replace with space
Respuestas:
Intente usar la sobrecarga que toma
CharSequence
argumentos (por ejemplo,String
) en lugar dechar
:fuente
CharSequence
. docs.oracle.com/javase/7/docs/api/java/lang/…X
sea del tipo char?toString
primero. Entonces su código se vería algo asístr = str.replace(yourChar.toString(), "");
str = str.replace("\uffff", "");
Utilizando
trabajará.
El uso sería
str.replace("X", "");
.Ejecutando
devoluciones:
fuente
replace
sobrecarga que toma un simpleCharSequence
.Si desea hacer algo con Java Strings, Commons Lang StringUtils es un gran lugar para buscar.
fuente
replace
.Este es el ejemplo de donde he eliminado el personaje: de la cadena.
fuente
Me gusta usar RegEx en esta ocasión:
donde g significa global, por lo que pasará por toda la cadena y reemplazará todas las X con '' Si desea reemplazar X y X, simplemente diga:
(Mira mi violín aquí: violín )
fuente
Hola Prueba este código a continuación
fuente
Use replaceAll en lugar de reemplazar
Esto debería darte la respuesta deseada.
fuente
return Pattern.compile(target.toString(), Pattern.LITERAL).matcher( this).replaceAll(Matcher.quoteReplacement(replacement.toString()));
fuente
input = "deletes all blanks too";
da "deletesalllankstoo"Aquí hay una función lambda que elimina todos los caracteres pasados como cadena
String str = "TextX XYto modifyZ";
deleteChars.apply( str, "XYZ" ); // –> "Text to modify"
Esta solución tiene en cuenta que la Cadena resultante, a diferencia de
replace()
, nunca se vuelve más grande que la Cadena inicial al eliminar caracteres. Por lo tanto, evita la asignación y la copia repetidas al tiempo que se agrega carácter a loStringBuilder
que sereplace()
hace.Sin mencionar la generación inútil
Pattern
y lasMatcher
instancias enreplace()
que nunca son necesarias para la eliminación.A diferencia de
replace()
esta solución, puede eliminar varios caracteres de una sola vez.fuente
str.replace("…", "")
crea instanciasprivate Pattern(…)
y luego en las llamadas de patrón generadaspublic String replaceAll(String repl)
. Entonces sucedieron las siguientes llamadas a funciones:return Pattern.compile(target.toString(), Pattern.LITERAL).matcher( this).replaceAll(Matcher.quoteReplacement(replacement.toString()));
- vea el comentario de Sal_Vader_808. En general, ca 3 veces más que mi solución lambda de cadera . Y aquí se explica muy bien por qué mi solución lambda de cadera también es más rápida: ¿Por qué es tan lento el String :: replace () de Java?Evaluación de las respuestas principales con un punto de referencia de rendimiento que confirma las preocupaciones de que la respuesta actual elegida haga costosas operaciones de expresiones regulares bajo el capó
Hasta la fecha, las respuestas proporcionadas vienen en 3 estilos principales (ignorando la respuesta de JavaScript;)):
En términos de tamaño de código, claramente el String.replace es el más conciso. La implementación simple de Java es un poco más pequeña y limpia (en mi humilde opinión) que la Lambda (no me malinterpreten, uso Lambdas a menudo cuando son apropiadas)
La velocidad de ejecución fue, en orden de más rápida a más lenta: implementación simple de Java, Lambda y luego String.replace () (que invoca expresiones regulares).
Con mucho, la implementación más rápida fue la implementación simple de Java ajustada para que preasigne el búfer StringBuilder a la longitud máxima posible del resultado y luego simplemente agregue caracteres al búfer que no están en la cadena "caracteres para eliminar". Esto evita las reasignaciones que se producirían para cadenas> 16 caracteres de longitud (la asignación predeterminada para StringBuilder) y evita el impacto de rendimiento "deslizar a la izquierda" de eliminar caracteres de una copia de la cadena que se produce es la implementación de Lambda.
El siguiente código ejecuta una prueba de referencia simple, ejecuta cada implementación 1,000,000 de veces y registra el tiempo transcurrido.
Los resultados exactos varían con cada ejecución, pero el orden de rendimiento nunca cambia:
La implementación de Lambda (como se copió de la respuesta de Kaplan) puede ser más lenta porque realiza un "desplazamiento a la izquierda por uno" de todos los caracteres a la derecha del carácter que se está eliminando. Obviamente, esto empeoraría para cadenas más largas con muchos caracteres que requieren eliminación. También puede haber algo de sobrecarga en la implementación de Lambda en sí.
La implementación String.replace, utiliza expresiones regulares y realiza una "compilación" de expresiones regulares en cada llamada. Una optimización de esto sería usar regex directamente y almacenar en caché el patrón compilado para evitar el costo de compilarlo cada vez.
fuente
fromString.replace("X", "").replace("Y", "").replace("Z", "");
que necesitaría. Ahora obtenemos el momento correcto: Inicio simple Hora: 759 | Inicio lambda Hora: 1092 | Iniciar eliminarCharsLambda () Hora: 1420 | Inicio reemplazar tiempo corregido: 4636Deberá poner los caracteres que deben eliminarse dentro de los corchetes durante el tiempo de reemplazo. El código de ejemplo será el siguiente:
fuente
Puede usar
str = str.replace("X", "");
como se mencionó anteriormente y estará bien. Para su información''
no es un carácter vacío (o válido) pero'\0'
es.Entonces podrías usar
str = str.replace('X', '\0');
en su lugar.fuente