Eu tenho uma string com muitos caracteres especiais. Quero remover tudo isso, mas manter os caracteres alfabéticos.
Como posso fazer isso?
Respostas:
Isso depende do que você quer dizer. Se você apenas deseja se livrar deles, faça o seguinte:
(Atualização: aparentemente, você também deseja manter os dígitos, use as segundas linhas nesse caso)
String alphaOnly = input.replaceAll("[^a-zA-Z]+","");
String alphaAndDigits = input.replaceAll("[^a-zA-Z0-9]+","");
ou o equivalente:
String alphaOnly = input.replaceAll("[^\\p{Alpha}]+","");
String alphaAndDigits = input.replaceAll("[^\\p{Alpha}\\p{Digit}]+","");
(Tudo isso pode ser significativamente melhorado ao pré-compilar o padrão regex e armazená-lo em uma constante)
Ou, com Goiaba :
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);
Mas se você quiser transformar caracteres acentuados em algo sensível que ainda é ascii, olhe para estas questões:
Eu estou usando isso
s = s.replaceAll("\\W", "");
Ele substitui todos os caracteres especiais da string.
Aqui
\ w: um caractere de palavra, abreviação de [a-zA-Z_0-9]
\ W: um caractere não verbal
Substitua quaisquer caracteres especiais por
replaceAll("\\your special character","new character");
ex: substituir todas as ocorrências de * por espaço em branco
replaceAll("\\*","");
* esta declaração só pode substituir um tipo de caractere especial por vez
string Output = Regex.Replace(Input, @"([ a-zA-Z0-9&, _]|^\s)", "");
Aqui, todos os caracteres especiais, exceto espaço, vírgula e E comercial, são substituídos. Você também pode omitir espaço, vírgula e "e" comercial pela seguinte expressão regular.
string Output = Regex.Replace(Input, @"([ a-zA-Z0-9_]|^\s)", "");
Onde Input é a string que precisamos para substituir os caracteres.
Seguindo o exemplo da resposta de Andrzej Doyle , acho que a melhor solução é 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;
}
}
Você pode usar expressões regulares básicas em strings para localizar todos os caracteres especiais ou usar classes padrão e correspondentes para pesquisar / modificar / excluir strings definidas pelo usuário. Este link contém alguns exemplos simples e fáceis de entender para expressões regulares: http://www.vogella.de/articles/JavaRegularExpressions/article.html
Você pode obter o Unicode para esse caractere lixo na ferramenta de mapa de caracteres no pc da janela e adicionar \ u eg \ u00a9 para o símbolo de copyright. Agora você pode usar essa string com aquele caractere de lixo em particular, não remova nenhum caractere de lixo, mas substitua pelo Unicode adequado.
Para espaços, use "[^ az AZ 0-9]" este padrão