Removendo Zero a esqueda

11 respostas
ambuzr

Olá pessoal,

To com uma duvida, to criando um sisteminha que ta ficando bacana, porém hoje eu vi algo que seria legal se conseguisse resolver

esse é o registro original que esta dentro do banco 151017

quando a caneta optica lê o codigo algumas vezes ela lê assim:
[color=red]0151017[/color]

quando vou comparar

if (registroNoBanco.equals(JTEXTFILD.gettext())) deletar(); //se o registro no banco for igual ao registro do campo JTEXTFILD execute o metodo deletar else System.out.println("Nao existe portanto nao pode ser deletado") ; //se nao mostre a menssagem que nao pode deletar pq nao existe no banco

ou seja

if ("151017".equals(JTEXTFILD.gettext("0151017")))

ele vai dar sempre o else pq a caneta acrescentou o zero a esquerda por portanto nao vai dar certo a comparacao

tem como quando ele ler, encontrou o primeiro zero, entao remover e compara?

tipo

onde o JTEXTEFILD 0151017

if (registroNoBanco.equals(JTEXTFILD.gettext())) deletar(); //se o registro no banco for igual a o do campo JTEXTFILD execute o metodo deletar else if (FAZ ALGO PRA COMPARAR REMOVENDO O PRIMEIRO ZERO) deletar(); //apos remover o primeiro zero se o registro no banco for igual ao registro do campo JTEXTFILD execute o metodo deletare atualizando o JTEXTFILD para o novo numero sem o zero se nao quando executar o metodo nao vai deletar pq ainda esta errado :wink: else System.out.println("Nao existe portanto nao pode ser deletado") ; //se depois disso ainda nao encontrar entao exiba a menssagem que nao pode deletar pq nao existe no banco

essa e minha duvida, alguem ai sabe???

brigadao pessoal :smiley:

11 Respostas

maquiavelbona

Tem uma coisa mais interessante e que você pode implementar sem maiores problemas. Compare o tamanho dos dois textos: caso sejam diferentes, vá colocando um 0 na frente da String menor até o tamanho ficar igual e depois compare.
Ex.:
Registro no banco: 1234
Leitura da caneta: 001234

Enquanto o texto “1234” for menor que “001234”, coloque 0 na frente.

Comparação final “001234”.equals(“001234”)

O contrário também dá certo.

Até!

W

seu java é 1.5 ? porque eu to usando autoboxing no código.

bom se eu intendi certo eu faria assim:

f (registroNoBanco.equals(  Integer.valueOf(JTEXTFILD.gettext()).toString() ))
deletar(); //se o registro no banco for igual ao registro do campo JTEXTFILD execute o metodo deletar
else
System.out.println("Nao existe portanto nao pode ser deletado") ;

bom meu código iria tirar qualquer zero a esquerda do número, que o leitor escrevesse no textfield antes de compara-lo ao valor do banco.

ViniGodoy

Tem letra nesse registro do banco? Porque ele não é cadastrado como número?
Então vc poderia converter o que é lido no código de barra também e comparar simplesmente com ==, afinal, só o valor numérico interessaria !

if (registroDoBanco == Integer.parseInt(jTextField.gettext())) deletar();

ambuzr

[i]maquiavelbona realmente pode ser uma boa vou tentar tambem

WillyKocher estou usando a ultima versao do java e do jdk nesse seu codigo ele removerar mesmo? se sim vou tentar aqui vai resolver meus problemas

ViniGodoy Não existe letras apenas numeros no meu codigo inicial eu convertia pra integer mas depois coloquei como string pq quando recebo o valor do banco ele vem como string mesmo ai fica facil de comparar mas so pra estudos pq com integer fica mas facil mas o do zero ainda estou com problema vou tentar os codigos que vcs me disponibilizara pra ver seu dar certo porque cada codigo dica funcional pode servir pra outras coisas

brigadao galera :XD: [/i]

ambuzr

[i]maquiavelbona e ViniGodoy Sua dica funcionou perfeito no final tive que converter pra Integer mesmo, muito boa tambem vlw
olha ai ele funcional

while(Integer.parseInt(registroNoBanco) < Integer.parseInt(registro))
		{
			registro = "0"+registro;
				
		}

		JOptionPane.showMessageDialog(null, "O novo valor do registro é "+registro);
WillyKocher seu codigo tambem foi exelente muito boa funcionou da maneira que estava pensando que era pra ser, agora poderia explicar o codigo pra mim, afinal não entendi porque ele tira o zero seria o .toString() ?
String registroNoBanco="151211";
		String registro="0151211";
		
		
		if (registroNoBanco.equals(  Integer.valueOf(registro).toString() ))
		 JOptionPane.showMessageDialog(null, "Pode deletar"); //se o registro no banco for igual ao registro do campo JTEXTFILD execute o metodo deletar  
		    else  
		   System.out.println("Nao existe portanto nao pode ser deletado") ;
ViniGodoy

Porque a variável registroNoBanco não é declarada como um int direto?

W

é simples, na verdade voce poderia fazer como o vini falou, até seria mais coerente trabalhar com inteiros ja que não tem letras, porem eu não sei é viavel para você fazer alterações no banco no tipo de dados do id, mas explicando…

Integer.valueOf(JTEXTFILD.gettext())

aqui ele já retira os zeros, simplismente porque ao transformar uma string para um inteiro ele verifica que é redundante ter zero a esquerda…

e o .toString() eu só coloquei porque pelo que percebi no seu codigo o seu valor que é resgatado do banco ta vindo como String, então converti a inteiro sem zeros para String novamente mantendo assim uma compatibilidade entre os dois tipos de dados que tão sendo comparados.

ambuzr

vlw galera consegui o resultado que queria, porem ja estava alegre entao veio outro problema do mesmo genero, o zero a esquerda mas para numeros enormes tipo 0010020203355533222110010

Resolvido

String s = "0010020203355533222110010".replace('0',' ').trim().replace(' ','0');

resultado

System.out.print(s); 1002020335553322211001
heheheehhe

achei aqui
http://forum.java.sun.com/thread.jspa?threadID=233557&messageID=839136

brigao a todos e fim do topico

ViniGodoy

Cuidado!!! Você tirou o zero a direita também.

Tente assim:

String num = "0010020203355533222110010"; System.out.println(num.replaceAll("^0*", ""));

Essa expressão regular significa:
^ -> No início da linha
0* -> Ache um ou mais zeros

E então substituimos por vazio.

ViniGodoy

Você pode ler o tipo que quiser do banco. O resultSet tem métodos para ler diretamente como int ou long.
A menos que o seu campo tenha um número realmente gigantesco. Não me lembro se tem método por lá para ler como BigInteger também.

A

galera fiz no netbeans e ta rodando de boa aqui utilizei o seguinte codigo:

private void tf_codigoKeyReleased(java.awt.event.KeyEvent evt) {

jtextfield.setText(jtextfield.getText().replaceAll("^0*",""));

}
Criado 13 de junho de 2008
Ultima resposta 20 de mai. de 2012
Respostas 11
Participantes 5