Aparentemente, você já sabe o que é regex com base em como você marcou sua pergunta. Você tentou ler a documentação da Stringaula? Em particular, procure a palavra 'regex'; existem alguns métodos, e um pouco de reflexão deve dizer a você como proceder ... :)
Karl Knechtel
3
A frase "personagem especial" é tão usada que quase não tem sentido. Se o que você quer dizer é: "Tenho esta lista de caracteres específicos que desejo remover", faça o que Thomas sugere e forme seu padrão com uma classe de caracteres regex e removê- replaceAlllos. Se você tiver requisitos mais esotéricos, edite a pergunta. :)
Ray Toal
1
esses não são caracteres especiais ... são: äâêíìéè, já que eles não são seus tipos de caracteres de 1 byte comuns como - + ^ são ... de qualquer maneira, como Ray afirmou, faça um replaceAllpara eles ou analise a string, adicione os caracteres que não são os caracteres que você deseja tirar para outra string e no final apenas faça um + = para uma String que você retornará.
Isso depende do que você define como caracteres especiais, mas tente replaceAll(...):
String result = yourString.replaceAll("[-+.^:,]","");
Observe que o ^ caractere não deve ser o primeiro da lista, já que você teria que escapar dele ou significaria "qualquer um, menos esses caracteres".
Outra observação: o -caractere precisa ser o primeiro ou o último na lista, caso contrário, você teria que escapar ou definiria um intervalo (por exemplo :-,, significaria "todos os caracteres no intervalo :até ,).
Assim, a fim de manter a consistência e não dependem de posicionamento personagem, você pode querer escapar todos aqueles personagens que têm um significado especial em expressões regulares (a lista a seguir não é completa, para estar ciente de outros personagens como (, {, $ etc.) :
String result = yourString.replaceAll("[\\-\\+\\.\\^:,]","");
Se você quiser se livrar de todos os sinais de pontuação e símbolos, tente este regex: \p{P}\p{S}(lembre-se de que nas strings Java você teria que escapar de barras invertidas:"\\p{P}\\p{S}" .
Uma terceira forma pode ser algo assim, se você puder definir exatamente o que deve ser deixado em sua string:
String result = yourString.replaceAll("[^\\w\\s]","");
Isso significa: substitua tudo que não seja um caractere de palavra (az em qualquer caso, 0-9 ou _) ou espaço em branco.
Editar: observe que existem alguns outros padrões que podem ser úteis. No entanto, não posso explicar todos eles, então dê uma olhada na seção de referência de regular-expressions.info .
Aqui está uma alternativa menos restritiva para a abordagem "definir caracteres permitidos", conforme sugerido por Ray:
String result = yourString.replaceAll("[^\\p{L}\\p{Z}]","");
A regex corresponde a tudo o que não seja uma letra em qualquer idioma e não seja um separador (espaço em branco, quebra de linha etc.). Observe que você não pode usar[\P{L}\P{Z}] (maiúscula P significa não ter essa propriedade), pois isso significaria "tudo que não é uma letra ou não é espaço em branco", o que quase corresponde a tudo, já que as letras não são espaços em branco e vice-versa.
Informações adicionais sobre Unicode
Alguns caracteres Unicode parecem causar problemas devido às diferentes maneiras possíveis de codificá-los (como um único ponto de código ou uma combinação de pontos de código). Consulte regular-expressions.info para obter mais informações.
+1 para a melhor solução de uso geral. Como você está listando algumas variações na ausência de detalhes do OP, pode também mostrar e explicar padrões como[\P{L}]
Ray Toal
Observe também que o -caractere deve ser o primeiro ou o último na lista ou precisa ter escape.
kapex
[^\\p{L}\\p{Z}]parece eliminar tremas alemães (ä, ö, ü) também (pelo menos para mim: /), então "A regex corresponde a tudo o que não é uma letra em qualquer idioma" não parece ser 100% correto
Peter
@Peter não elimina esses caracteres em meus testes. Pode haver outro problema no seu caso, por exemplo, uma codificação diferente do texto. Vou adicionar um link para mais informações.
Thomas
1
@Thomas String result = yourString.replaceAll("[^\w\s]","");comete erroInvalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )
Visruth
41
Isso irá substituir todos os caracteres, exceto alfanuméricos
Os padrões são expressões regulares compiladas. Em muitos casos, os métodos de conveniência, como String.matches, String.replaceAlle String.splitserá preferível, mas se você precisa fazer um monte de trabalho com a mesma expressão regular, pode ser mais eficiente para compilar uma vez e reutilizá-lo. A classe Pattern e seu companheiro, Matcher, também oferecem mais funcionalidade do que a pequena quantidade exposta por String.
String
aula? Em particular, procure a palavra 'regex'; existem alguns métodos, e um pouco de reflexão deve dizer a você como proceder ... :)replaceAll
los. Se você tiver requisitos mais esotéricos, edite a pergunta. :)replaceAll
para eles ou analise a string, adicione os caracteres que não são os caracteres que você deseja tirar para outra string e no final apenas faça um + = para uma String que você retornará.deleteChars.apply( fromString, "-+^.:," );
- encontre deleteChars aquiRespostas:
Isso depende do que você define como caracteres especiais, mas tente
replaceAll(...)
:String result = yourString.replaceAll("[-+.^:,]","");
Observe que o
^
caractere não deve ser o primeiro da lista, já que você teria que escapar dele ou significaria "qualquer um, menos esses caracteres".Outra observação: o
-
caractere precisa ser o primeiro ou o último na lista, caso contrário, você teria que escapar ou definiria um intervalo (por exemplo:-,
, significaria "todos os caracteres no intervalo:
até,
).Assim, a fim de manter a consistência e não dependem de posicionamento personagem, você pode querer escapar todos aqueles personagens que têm um significado especial em expressões regulares (a lista a seguir não é completa, para estar ciente de outros personagens como
(
,{
,$
etc.) :String result = yourString.replaceAll("[\\-\\+\\.\\^:,]","");
Se você quiser se livrar de todos os sinais de pontuação e símbolos, tente este regex:
\p{P}\p{S}
(lembre-se de que nas strings Java você teria que escapar de barras invertidas:"\\p{P}\\p{S}"
.Uma terceira forma pode ser algo assim, se você puder definir exatamente o que deve ser deixado em sua string:
String result = yourString.replaceAll("[^\\w\\s]","");
Isso significa: substitua tudo que não seja um caractere de palavra (az em qualquer caso, 0-9 ou _) ou espaço em branco.
Editar: observe que existem alguns outros padrões que podem ser úteis. No entanto, não posso explicar todos eles, então dê uma olhada na seção de referência de regular-expressions.info .
Aqui está uma alternativa menos restritiva para a abordagem "definir caracteres permitidos", conforme sugerido por Ray:
String result = yourString.replaceAll("[^\\p{L}\\p{Z}]","");
A regex corresponde a tudo o que não seja uma letra em qualquer idioma e não seja um separador (espaço em branco, quebra de linha etc.). Observe que você não pode usar
[\P{L}\P{Z}]
(maiúscula P significa não ter essa propriedade), pois isso significaria "tudo que não é uma letra ou não é espaço em branco", o que quase corresponde a tudo, já que as letras não são espaços em branco e vice-versa.Informações adicionais sobre Unicode
Alguns caracteres Unicode parecem causar problemas devido às diferentes maneiras possíveis de codificá-los (como um único ponto de código ou uma combinação de pontos de código). Consulte regular-expressions.info para obter mais informações.
fonte
[\P{L}]
-
caractere deve ser o primeiro ou o último na lista ou precisa ter escape.[^\\p{L}\\p{Z}]
parece eliminar tremas alemães (ä, ö, ü) também (pelo menos para mim: /), então "A regex corresponde a tudo o que não é uma letra em qualquer idioma" não parece ser 100% corretoString result = yourString.replaceAll("[^\w\s]","");
comete erroInvalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )
Isso irá substituir todos os caracteres, exceto alfanuméricos
replaceAll("[^A-Za-z0-9]","");
fonte
Conforme descrito aqui http://developer.android.com/reference/java/util/regex/Pattern.html
public class RegularExpressionTest { public static void main(String[] args) { System.out.println("String is = "+getOnlyStrings("!&(*^*(^(+one(&(^()(*)(*&^%$#@!#$%^&*()(")); System.out.println("Number is = "+getOnlyDigits("&(*^*(^(+91-&*9hi-639-0097(&(^(")); } public static String getOnlyDigits(String s) { Pattern pattern = Pattern.compile("[^0-9]"); Matcher matcher = pattern.matcher(s); String number = matcher.replaceAll(""); return number; } public static String getOnlyStrings(String s) { Pattern pattern = Pattern.compile("[^a-z A-Z]"); Matcher matcher = pattern.matcher(s); String number = matcher.replaceAll(""); return number; } }
Resultado
String is = one Number is = 9196390097
fonte
Experimente o
replaceAll()
método daString
classe.BTW, aqui está o método, tipo de retorno e parâmetros.
public String replaceAll(String regex, String replacement)
Exemplo:
String str = "Hello +-^ my + - friends ^ ^^-- ^^^ +!"; str = str.replaceAll("[-+^]*", "");
Deve remover todos os caracteres {'^', '+', '-'} que você deseja remover!
fonte
Para remover o caractere especial
String t2 = "!@#$%^&*()-';,./?><+abdd"; t2 = t2.replaceAll("\\W+","");
O resultado será:
abdd.
Isso funciona perfeitamente.
fonte
Use o
String.replaceAll()
método em Java. replaceAll deve ser bom o suficiente para o seu problema.fonte
Você pode remover um único caractere da seguinte maneira:
String str="+919595354336"; String result = str.replaceAll("\\\\+",""); System.out.println(result);
RESULTADO:
919595354336
fonte
Se você quiser apenas fazer uma substituição literal em java, use
Pattern.quote(string)
para escapar qualquer string para um literal.fonte