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