¿Cómo reemplazar caracteres especiales en una cadena?


Respuestas:


187

Eso depende de lo que quieras decir. Si solo desea deshacerse de ellos, haga esto:
(Actualización: aparentemente también desea mantener los dígitos, use las segundas líneas en ese caso)

String alphaOnly = input.replaceAll("[^a-zA-Z]+","");
String alphaAndDigits = input.replaceAll("[^a-zA-Z0-9]+","");

o el equivalente:

String alphaOnly = input.replaceAll("[^\\p{Alpha}]+","");
String alphaAndDigits = input.replaceAll("[^\\p{Alpha}\\p{Digit}]+","");

(Todos estos se pueden mejorar significativamente al precompilar el patrón de expresiones regulares y almacenarlo en una constante)

O, con Guayaba :

private static final CharMatcher ALNUM =
  CharMatcher.inRange('a', 'z').or(CharMatcher.inRange('A', 'Z'))
  .or(CharMatcher.inRange('0', '9')).precomputed();
// ...
String alphaAndDigits = ALNUM.retainFrom(input);

Pero si desea convertir caracteres acentuados en algo sensato que aún sea ascii, mire estas preguntas:


cuando uso esta función, también se eliminan todos los números. pero no quiero que se eliminen los números. Solo quiero eliminar los caracteres especiales. Sugiera algo ..
Tanu

Bueno, dijiste que solo querías el alfabeto. Pero actualizaré mi respuesta en un minuto
Sean Patrick Floyd

Quiero concat string pero con alguna condición como 1.Si solo hay un resultado, no se requiere concat 2.Si el resultado es más de 1 que la cadena concat en el siguiente ejemplo de formulario: stack + over + flow
Tanu

2
@Tanu, esa es una pregunta diferente. Hazlo uno nuevo
Pekka

¿Qué pasa si no quiero que se eliminen los espacios? o decir todos los espacios como pestañas, las líneas nuevas se contrajeron como un solo espacio?
Maldito

74

Estoy usando esto.

s = s.replaceAll("\\W", ""); 

Reemplaza todos los caracteres especiales de la cadena.

aquí

\ w: un carácter de palabra, abreviatura de [a-zA-Z_0-9]

\ W: un personaje que no es una palabra


No funciona para <script> alert ('XSS Attack') </script>. ¿Cómo eliminar los caracteres '<', '>', '\'?
Manoj

11

Puede utilizar el siguiente método para mantener los caracteres alfanuméricos.

replaceAll("[^a-zA-Z0-9]", "");

Y si desea mantener solo los caracteres alfabéticos, use este

replaceAll("[^a-zA-Z]", "");

6
Para uso espacialreplaceAll("[^a-zA-Z0-9 ]", "");
Qamar

6

Reemplazar cualquier carácter especial por

replaceAll("\\your special character","new character");

ej .: para reemplazar toda la aparición de * con espacios en blanco

replaceAll("\\*","");

* esta declaración solo puede reemplazar un tipo de carácter especial a la vez


Definitivamente lo que estaba buscando cuando vi el título de la pregunta "¿Cómo reemplazar caracteres especiales en una cadena?" ¡Gracias!
Mr.Drew

2
string Output = Regex.Replace(Input, @"([ a-zA-Z0-9&, _]|^\s)", "");

Aquí se reemplazan todos los caracteres especiales excepto el espacio, la coma y el ampersand. También puede omitir el espacio, la coma y el ampersand mediante la siguiente expresión regular.

string Output = Regex.Replace(Input, @"([ a-zA-Z0-9_]|^\s)", "");

Donde Input es la cadena que necesitamos para reemplazar los caracteres.


2

Siguiendo el ejemplo de la respuesta de Andrzej Doyle , creo que la mejor solución es usar org.apache.commons.lang3.StringUtils.stripAccents():

package bla.bla.utility;

import org.apache.commons.lang3.StringUtils;

public class UriUtility {
    public static String normalizeUri(String s) {
        String r = StringUtils.stripAccents(s);
        r = r.replace(" ", "_");
        r = r.replaceAll("[^\\.A-Za-z0-9_]", "");
        return r;
    }
}


0

Puede obtener unicode para ese carácter basura de la herramienta de mapa de caracteres en Windows PC y agregar \ u eg \ u00a9 para el símbolo de copyright. Ahora puede usar esa cadena con ese carácter basura en particular, no elimine ningún carácter basura, reemplácelo con unicode adecuado.



-1
let name = name.replace(/[&\/\\#,+()$~%!.„'":*‚^_¤?<>|@ª{«»§}©®™ ]/g, '').toLowerCase();

¿Puedes explicar un poco la expresión regular?
stdunbar

Le recomiendo que agregue notas en su sección de respuestas para explicar su código. Lea más sobre cómo escribir buenas respuestas .
Joe Ferndz

Esto realmente no responde a la pregunta. Si tiene una pregunta diferente, puede hacerla haciendo clic en Preguntar . También puede agregar una recompensa para llamar más la atención sobre esta pregunta una vez que tenga suficiente reputación . - De la opinión
Aman Garg
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.