Re:trocar caracteres em um String!

A própria classe String tem o método replaceAll.

String a = "!@@##$pera" ;
a.replaceAll("!@#$$" , "") ;

mas se vc espeera substituir estes caracteres onde quer q eles estejam o correto é fazer um mecanismo de busca

[code] public static void main(String[] args) {

	String[] nulos = {"!", "@", "#", ...};
	String str = "!@@##$pera";

	for (String n:nulos)
		str = str.replaceAll(n, "");

	System.out.println(str);
	
}[/code]

java_coffe,

Este código funciona perfeitamente. Veja:

	public static void main(String arg[]) {
		String palavra = "!@#$%¨&*()_+-=´[`{~]^},.<>;/º/";
		String palavra1 = palavra.replaceAll("!@#", "");
		System.out.println("Palavra era:   [" + palavra + "]");
		System.out.println("Palavra ficou: [" + palavra1 + "]");
	}

Exibe:

Palavra era:   [!@#$%¨&*()_+-=´[`{~]^},.<>;/º/]
Palavra ficou: [$%¨&*()_+-=´[`{~]^},.<>;/º/]

Certo?

java_coffe,

Como assim? :smiley:

Manda o exemplo do que você tá falando…

Valeu!

[quote=java_coffe][code]
public static void main(String arg[]){

	String palavra = "!@#$%¨&*()_+-=´[`{~]^},.<>;/:?º/" ;
	
	String palavra1 = palavra.replaceAll("!@#","");
	
	System.out.println(palavra1)		
	
	
}

[/code]

Pq não da certo ?

Imprime sempre a mesma string .[/quote]

A classe String é IMUTÁVEL.
Logo, todos os seus métodos retornam uma nova String, mantendo a original inalterada. Você deve estar tentando verificar se a original foi alterada. Use uma nova String para receber o retorno do método replaceAll().

Abraço!

cassio,

Ele já está fazendo isso. Porém, mesmo se ele estivesse usando a mesma String, não haveria problema. Apesar da String ser imutável, a instância da String não é, então fazendo algo do tipo:

String a = "blablabla";
a = a.replaceAll("b", "c");

Não teria problema, apesar da instância não ser a mesma, o código funciona.

java_coffe,

O problema que você está tendo é que o primeiro parâmetro do replaceAll não é uma String normal, e sim uma Regular Expression. E, numa regex (REGular EXpression), o caracter $ tem um significado especial. Para todos os caracteres especiais, você deve utilizar um caracter de escape antes, quando quiser usá-los como literais.

No seu caso, tem que ser assim:

	public static void main(String arg[]) {
		String palavra = "!@#$%¨&*()_+-=´[`{~]^},.<>;/º/";
		String palavra1 = palavra.replaceAll("!@#\\$", "");
		System.out.println("Palavra era:   [" + palavra + "]");
		System.out.println("Palavra ficou: [" + palavra1 + "]");
	}

Note o \ antes do $ no replaceAll.

Abraços!

Se vc estiver usando o Java 5 pode usar a versão do método replace que é sobrecarregada p/ receber duas sequencias de caracteres. Aqui funcionou perfeitamente:

String frase = &quot;$%#%@@%%$Fulano$$#@&quot;;
String nulos = &quot;@#%$&quot;;
for (int i = 0; i &lt nulos.length(); i++) {
    frase = frase.replace(Character.toString(nulos.charAt(i)) , &quot;&quot;);
}
System.out.println(frase);

Agora, se for preciso usar o replaceAll mesmo, vc vai ter que fazer o lance que o nosso amigo fcoury falou, de acrescentar o caracter de escape, por que o replaceAll recebe uma expressão regular.

FredMP,

Uma dúvida: este método que você propos vai retirar todas as ocorrências de todos os caracteres da string “nulo”, correto?

Ex.: se tenho uma string “@!#$%&!@(!@!" e a string nulo for “@!” a string vai ficar "#$%&(” com o seu código, e com o meu, “#$%&!@*(!”, certo?

Em outras palavras, o seu código tira TODAS as ocorrências de TODOS os caracteres em nulo, enquanto o meu retira TODAS as ocorrências da string nulo como um TODO, certo?

Valeu!

é muito simples, é só fazer isto:

[code] String[] nulos = {"!", “@”, “#”};
String str = “!@@##$pera”;

	for (int i = 0; i < nulos.length; i++) 
		str = str.replaceAll(nulos[i], "");

	System.out.println(str);[/code]

ele apagará qualquer ocorrencia de qualquer letra em nulos
Qual o problema com meu algoritmo?

OBS: já havia citado o exemplo mais acima…

Gente eu gostaria de saber se tem alguma classe que pode me ajudar na substituição de varios caracteres …

Exemplo .:
String a = "pera" ; a.replace("p" , "b") ;
O replace so troca de um e um !

Mas na verdade ao invés de eu tratar uma unico Caracter eu gostaria de tratar varios ao mesmo tempo .

Exemplo.:
[code]

                                    String a = "!@@##$pera" ;
                                    a.replace(""!@#$$" , "") ;
                         
                         [/code]

Neste exemplo eu gostaria que esses caracteres fossem substituidos por espaço em branco .

Tem alguma classe onde eu possa fazer isso !?

Agradeço a quam ajudar !

public static void main(String arg[]){
		
		String palavra = "!@#$%¨&*()_+-=´[`{~]^},.<>;/:?º/" ;
		
		String palavra1 = palavra.replaceAll("!@#","");
		
		System.out.println(palavra1)		
		
		
	}

Pq não da certo ?

Imprime sempre a mesma string .

Vc ja tentou colocar mas 3 caracteres !?

Aí vc vai ver que vai imprimir a mesma String . :frowning:

public static void main(String arg[]) {
 		String palavra = "!@#$%¨&*()_+-=´[`{~]^},.<>;/º/";
 		String palavra1 = palavra.replaceAll("!@#$%", "");
 		System.out.println("Palavra era:   [" + palavra + "]");
 		System.out.println("Palavra ficou: [" + palavra1 + "]");
 	}

Ele vai imprimir as duas strings do mesmo modo …Eu so fiz colocar o $% a mais dentro do replaceAll …