Problema com o metodo replace de String

23 respostas
S

se eu fizer isso ae e mandar uma String como ex. “60.547-810” ele nao vai alterar nada.

mas se eu fizesse assim

dava certo, mas nao é bem o que eu quero, pq quero tirar tanto o “.” quanto o “-” , e pode ser que eu venha precisar usar em mais lugares tal metodo

alguem sabe o pq que nao ta dando certo?

off-topic
o replaceAll faz basicamente oq?

23 Respostas

I

Bom Dia,
você está subistituindo, mas não esta guardando em variável nenhuma e acaba retornando o mesmo valor de CEP.

tente colocar uma variavel recebendo o CEP (ex:ceMod=cep.replace(".",""); ou this.cep=cep.replace(".",""); ) e retorne essa variável.

Abraços,
Thiago Alvares

SCJP 1.4

S

realmente eh isso q nosso colega disse, String sao imutaveis e o que vc fez irá criar uma nova String mas ela ficará solta pra resolver coloque uma variavel para receber o endereço da nova String na memoria!!

S

Ainda nao deu certo

nao deu certo esse de cima:

esse aqui tentei assim ( q nao eh o que eu quero) e tbem nao deu certo

P

//Estou usando uma classe especifica chamada Keyboard, com essa
//classe fica mais faciltrabalhar com o I/O de dados
//enquanto a variavel para receber o cep realmente funciona mas vc
//pode retornar direto ja com o metodo replace isso minimiza o seu codigo ao inves de criar duas variaveis String para receber o cep que no caso seria para a troca do ‘.’ e do ‘-’ blzzzz;
//Bom nao sei se vc ja consegui resolver o seu problema
//Fiz este codigo e modifiquei algumas coisas blzzzz
//se ajudar …

class Teste {

public static String quebraCep(String cep){ 
return cep.replace('.',' ').replace('-',' ');
}

public static void main(String[] args) { 
String recebe_cep;
System.out.println("Entre com o CEP:");
recebe_cep = Keyboard.readString();
System.out.println(quebraCep(recebe_cep));
}

}

// a classe “Keyboard” eu posso enviar por email
//farô

P

//olá !!!
// bom tente este sem a classe Keyboard, fiz uma troca
//no metodo quebraCep
//ok
//Abraços

import javax.swing.JOptionPane;

class Teste {

public static String quebraCep (String cep) {

return cep.replace(’.’,’ ).replace(-’,’ ');

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

String linguagem = JOptionPane.showInputDialog(Entre com o Nome a ser Invertido);

JOptionPane.showMessageDialog(null,quebraCep(linguagem));

}

}
I

Boa Tarde,

o erro além de o cep não ser referenciado é que as suas aspas devem ser substituidas por plics pois quando você usa o método replace, você está lidando com caracteres.

replace([color=“red”]’-’,’’[/color]);

Abraços,
Thiago Alvares

SCJP 1.4

S

ate agora ta dando pau :frowning:

P

O codigo que postei acima sem a classe “Keyboard” esta funcinando, so nao sei se é realmente isso que vc quer, mas pelo que andei olhando acho que é isso mesmo…blzzzz

tenta rodar esse codigo…

Farô

S

tiago@hortela:~/testes$ javac Teste.java
Teste.java:8: error: Invalid character literal.
return cep.replace(’.’,’’).replace(’-’,’’);
^
1 error

cara se colocar os chars vazios dao pau :frowning:
ex: 60.347-810
e se eu colocar com espacos vai ficar a string ex: 60 347 810, e o q eu queria era 60347810

J

pois eh, ao contrario de string, nao existe o char vazio…

S

O que eu quero eh o seguinte:

fazer um metodo que receba uma String ( que seria um CNPJ, CPF ou CEP), retire tudo q nao for numero dela e que nao deixe os espacos em branco.

o que vcs me dizem ?

J

cara, nao eh o metodo mais rapido, e sem duvida nao eh o mais simples, mas eu pessoalmente nunca usei o split(), entao tenta fazer assim:

String cpf = "[CPF removido]";
String temp = "";
for(int i = 0; i < cpf.length(); i++) {
  if(Character.isDigit(cpf.charAt(i))) {
     temp += cpf.charAt(i);
  }
}
//temp = [telefone removido]

espero ter ajudado

I

Bom Dia,
usa o indexOf.
ele apaga o caracter que vc não quer.

tô meio ocupado agora mas daqui a pouco eu explico melhor.

Thiago Alvares

SCJP 1.4

B

Usar

String temp = cpf.replace('-', (char)0).replace('.', (char)0);

O replace vai eliminar o caractere, pois o char 0 é nulo.

Essa é a prova que velhos truques do Delphi se tornam novos no Java :wink:

Atenciosamente,
Bento Monteiro
SCJP

S

depois vo testar ae pra ver como que fica :stuck_out_tongue:

P

//Olá, cara eu fiz este codigo aki e deu certo , agora esta saindo do jeito que vc quer blzzzz
//so que aki nao precisamos usar mais o metodo replace , pois o metodo replace
//deve conter um unico caracter, por exemplo ->> ‘’ <<- nao é caracter , agora->> ’ ’ <<- sim ok
//aki estamos trabalhando com tokens é
//simplesmente dizer pra ele o que vc gostaria de comparar que no caso foi o ". e o - " ok
//farô

import javax.swing.JOptionPane;
import java.util.*;

class Teste1 {

public static String quebraCep(String cep){

String [] concat = new String [3];
int i;

StringTokenizer c=new StringTokenizer(cep,".-");

for(i=0;i&lt;3;i++)
{
concat[i] = c.nextToken();	
}

return concat[0]+concat[1]+concat[2];
}

public static void main(String[] args) {

String linguagem = JOptionPane.showInputDialog(CEP);

JOptionPane.showMessageDialog(null,quebraCep(linguagem));

}

}
B

pkall,

Não leva a mal não mas o StringTokenizer não foi feito para isso. Sem contar que esse código é deselegante.

Atenciosamente,
Bento Monteiro
SCJP

P

Cara este metodo tambem nao funciona do jeito que ele quer , isso tambem vai retornar um caracter so que nullo.

String temp = cep.replace(’-’, (char)0).replace(’.’, (char)0);

B

Vai funcionar sim. Pode testar

public class Teste2 {

public Teste2() {
}
 
public static void main(String[] args) {
  String cpf = "[CPF removido]"; 
  String temp = cpf.replace('-', (char)0).replace('.', (char)0);
  System.out.println(cpf);
  System.out.println(temp);
}

}

Vai imprimir [telefone removido]

Atenciosamente,
Bento Monteiro
SCJP

I

Boa Tarde,

utiliza o método substring para pegar os numeros antes do ponto, antes da barra e depois da barra.
Coloca cada um em uma variável e depois usa o cancat.

P.S- Daqui a pouco envio o código (tô enrolado no trabalho).

Thiago Alvares

SCJP - 1.4

P

cara sinto muito , mas nao funciona…

F
Bom, usar vazio do tipo char desta forma '' é um erro de sintax, correto seria ' ' e não tem necessidade de implementar neste algoritmo uma rotina de laço, tente fazer assim:
class teste{
    
    static String clearCep(String cep){
        return cep.replace(".","").replace("-","");
    }

    public static void main(String[] args) {
        System.out.println( clearCep( "78.909-630" ) );
    }
}
Fiz e testei aqui, funcionou bem.

Qualquer coisa, avisa ai. :wink:

Abraço,
Fábio Heleno (FaHeCoN)

J

Aqui funcionou assim:

import javax.swing.JOptionPane; 

class Teste { 

public static String quebraCep (String cep) {
String temp="";
char[] cep1=cep.toCharArray();
for(int i = 0; i < cep1.length; i++) { 
  if (cep1[i]!='.' && cep1[i]!='-')
     temp=temp+cep1[i];
} 
return temp;
} 

public static void main(String[] args) { 
String linguagem = JOptionPane.showInputDialog("Entre com o CEP"); 
JOptionPane.showMessageDialog(null,quebraCep(linguagem)); 
} 
}
Criado 2 de junho de 2005
Ultima resposta 5 de jun. de 2005
Respostas 23
Participantes 8