Quero remover caracteres especiais como:
- + ^ . : ,
de uma String usando Java.
Quero remover caracteres especiais como:
- + ^ . : ,
de uma String usando Java.
replaceAlllos. Se você tiver requisitos mais esotéricos, edite a pergunta. :)
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á.
deleteChars.apply( fromString, "-+^.:," );- encontre deleteChars aqui
Respostas:
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.
[\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% correto
String 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]","");
Conforme descrito aqui http://developer.android.com/reference/java/util/regex/Pattern.html
Os padrões são expressões regulares compiladas. Em muitos casos, os métodos de conveniência, como
String.matches,String.replaceAlleString.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.
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
Experimente o replaceAll()método da Stringclasse.
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!
Para remover o caractere especial
String t2 = "!@#$%^&*()-';,./?><+abdd";
t2 = t2.replaceAll("\\W+","");
O resultado será: abdd.
Isso funciona perfeitamente.
Use o String.replaceAll()método em Java.
replaceAll deve ser bom o suficiente para o seu problema.
Stringaula? Em particular, procure a palavra 'regex'; existem alguns métodos, e um pouco de reflexão deve dizer a você como proceder ... :)