Como substituir caracteres especiais em uma string?


Respostas:


186

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:


quando estou usando esta função, ela está removendo todos os números também. mas eu não quero que os números sejam removidos. apenas quero remover caracteres especiais. Sugira algo ...
Tanu

bem, você disse que só queria o alfabeto. Mas atualizarei minha resposta em um minuto
Sean Patrick Floyd

Eu quero concat string, mas com alguma condição como 1.Se houver apenas um resultado, nenhuma concat é necessária 2.Se o resultado for mais do que 1 do que concat string no seguinte exemplo de formato: pilha + sobre + fluxo
Tanu

2
@Tanu, essa é uma questão diferente. Faça um novo
Pekka

E se eu não quiser que os espaços sejam removidos? ou digamos que todos os espaços são tabulações, novas linhas recolhidas como apenas um espaço?
maldito

74

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


Não funciona para <script> alert ('XSS Attack') </script>. Como remover '<', '>', '\' caracteres?
Manoj

11

Você pode usar o método a seguir para manter os caracteres alfanuméricos.

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

E se você quiser manter apenas caracteres alfabéticos, use este

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

5
Para uso do espaçoreplaceAll("[^a-zA-Z0-9 ]", "");
Qamar

5

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


Definitivamente, o que eu estava procurando quando vi o título da pergunta "Como substituir caracteres especiais em uma string?" obrigado!
Mr.Drew

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


2

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;
    }
}


0

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.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.