string nula ou vazia  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
proteus_adi
JavaGuru
[Avatar]

Membro desde: 24/11/2004 10:05:10
Mensagens: 237
Localização: Belo Horizonte -
Offline



esse código funciona belezinha a não ser que o parametro seja nulo ou vazio...
alguem ai tem alguma dica?
testes com IF não foram muito bem sucedidos...
hehe

ps: isso é JavaStoredProcedures

"Remember Yesterday and think about tomorrow... but you have to live today"

Existe vitória e existe derrota.
O segundo lugar é o primeiro dos que perderam.
[Email] [MSN]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

1) Porque é que você chama o toString de uma String? (Na prática não muda nada, mas é só pra aporrinhar mesmo). Do jeito que você escreveu o código aquele pessoal fanático por "performance" pediria para corrigir para:

2) O seu IF não é só pra pôr fora do "for" para evitar dar um NullPointerException em param.length()?
3) Você teve sorte porque na sua string não tem nenhum caracter como "\n" cuja representação é "A" e não "0A" pela rotina que você escreveu. Se entrasse algum caracter desses (que tem apenas 1 dígito) você ia ter problemas na hora de recuperar a string original.
>
[WWW]
proteus_adi
JavaGuru
[Avatar]

Membro desde: 24/11/2004 10:05:10
Mensagens: 237
Localização: Belo Horizonte -
Offline

então deixa eu sugar um pouco mais de teoria...
se uma string for nula.. eu não vou então conseguir usar o string.length()?????

e esse stringBuffer realmente rende tanto assim?
evita coisas do tipo estouro de variável?

e,
valeu..
hehe

"Remember Yesterday and think about tomorrow... but you have to live today"

Existe vitória e existe derrota.
O segundo lugar é o primeiro dos que perderam.
[Email] [MSN]
Sergio Lopes
Moderador
[Avatar]

Membro desde: 17/11/2003 00:22:10
Mensagens: 1368
Localização: São Paulo - SP
Offline

proteus_adi wrote:então deixa eu sugar um pouco mais de teoria...
se uma string for nula.. eu não vou então conseguir usar o string.length()?????


nao... vc nao pode chamar metodos em cima de uma referencia pra null

proteus_adi wrote:e esse stringBuffer realmente rende tanto assim?

rende se vc usar 1 zilhao de concatenacoes...
pras coisas gerais do dia a dia, use concatenacao de Strings mesmo que rende muito mais em clareza de codigo

E agora tem o StringBuilder tbm no java 5 q eh divertido

proteus_adi wrote:evita coisas do tipo estouro de variável?

hein?!



Sérgio Lopes - twitter: @sergio_caelum - blog pessoal: sergiolopes.org
Curso Java | Apostilas Java | Arquitetura Java | Curso Rails
proteus_adi
JavaGuru
[Avatar]

Membro desde: 24/11/2004 10:05:10
Mensagens: 237
Localização: Belo Horizonte -
Offline

3) Você teve sorte porque na sua string não tem nenhum caracter como "\n" cuja representação é "A" e não "0A" pela rotina que você escreveu. Se entrasse algum caracter desses (que tem apenas 1 dígito) você ia ter problemas na hora de recuperar a string original.



eu não entendi da primeira vez..
o que vc quer dizer com isso?
essa rotina não funciona pra qqer string???

"Remember Yesterday and think about tomorrow... but you have to live today"

Existe vitória e existe derrota.
O segundo lugar é o primeiro dos que perderam.
[Email] [MSN]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Vamos por partes.
Integer.toHexString(int) lhe volta uma string hexadecimal, sem zeros à esquerda. Assim: Integer.toHexString (' ') lhe retorna "20", que é o código hexadecimal do espaço.
Suponha que sua string tivesse algum caracter como um ENTER ("\n", ou 0x0A). Isso não é incomum mas não sei se você quer isso mesmo ou não. O que vai ocorrer é que Integer.toHexString('\n') vai lhe retornar "A", não "0A".
Como o Oracle quer a string hexadecimal com 2 dígitos para cada caracter, a partir desse caracter as coisas vão ficar fora de sincronia.
[WWW]
proteus_adi
JavaGuru
[Avatar]

Membro desde: 24/11/2004 10:05:10
Mensagens: 237
Localização: Belo Horizonte -
Offline

deixa eu ver então se eu entendi...
eu tenho que fazer uma implementação do tipo..
se tamanho retorno menor que dois adiciona um 0???

eu tive mesmo problemas com enters e tabs..
eu uso um replace antes de rodar isso..
rs**
e tiro os espaços excessivos tambem...

mas a solução seria isso?
ou seria melhor uma tabela?

"Remember Yesterday and think about tomorrow... but you have to live today"

Existe vitória e existe derrota.
O segundo lugar é o primeiro dos que perderam.
[Email] [MSN]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Tem dois jeitos.
Um deles é fazer na unha - se procurar tem um monte de gente que faz assim. (Com tabela 0,1,2,3...A,B,C,D,E,F). Não é difícil mas tem de tomar cuidado.
Outro é usar um truque sujo, que pelo visto é usado por um monte de gente (outro dia tinha visto no forum.java.sun.com um cara usando isso.)
Digamos que você tenha um caracter 0x0A.
O que ocorre quando você faz um OR (|) desse valor com 0x100? Vai ficar como 0x10A, e na hora que você for achar Integer.toHexString, vai valer 10A. Aí o que eu faço é pegar do 2o. caracter em diante.
Resumindo:

Integer.toHexString (((param.charAt(i) & 0xFF) | 0x100).substring(1);

(O outro truque é usar & 0xFF, que deixa o valor no intervalo entre 00 e FF. S por acaso você tiver um caracter cujo código Unicode passar de 0xFF, ele vai ser podado, mas em português são raros esses caracteres.)

This message was edited 1 time. Last update was at 25/05/2005 19:41:28

[WWW]
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team