Tengo una cadena con muchos caracteres especiales. Quiero eliminar todos esos, pero mantener los caracteres alfabéticos.
¿Cómo puedo hacer esto?
Respuestas:
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:
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
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
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.
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;
}
}
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
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.
Para espacios, use "[^ az AZ 0-9]" este patrón
let name = name.replace(/[&\/\\#,+()$~%!.„'":*‚^_¤?<>|@ª{«»§}©®™ ]/g, '').toLowerCase();