¿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:

Sean Patrick Floyd
fuente
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

Dhiral Pandya
fuente
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]", "");
dhuma1981
fuente
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

Krishnamurthy
fuente
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.

Mike Clark
fuente
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;
    }
}
Marco Sulla
fuente
0

Puede usar expresiones regulares básicas en cadenas para encontrar todos los caracteres especiales o usar clases de patrones y comparadores para buscar / modificar / eliminar cadenas definidas por el usuario. Este enlace tiene algunos ejemplos simples y fáciles de entender para expresiones regulares: http://www.vogella.de/articles/JavaRegularExpressions/article.html

Madhu Nandan
fuente
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.

Mundroid
fuente
0

Para espacios, use "[^ az AZ 0-9]" este patrón

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