Problemas com replaceAll  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
andre_a_s
GUJ Ranger
[Avatar]

Membro desde: 23/02/2003 01:04:53
Mensagens: 755
Localização: Santo André(SP)
Offline

Senhores... devo estar com problemas de alcool na cabeça....
Estou fazendo o seguinte:


Antes de executar a minha string está com o valor de "2.290,00"
Após a execução da linha, minha string está como valor: ""

Como é possivel?
Se eu mudar de replaceAll para replace ele funciona... mas eu não consigo entender o porque.
Ele simplesmente apaga minha string.

*Se o replaceAll for com qualquer coisa que não seja "ponto final" ele funciona.
To doido mesmo?

Gosta de cerveja e de viagem?
Visite meu blog!
http://www.TravelAndBeer.com
[Email] [MSN] [ICQ]
jgbt
GUJ Master
[Avatar]

Membro desde: 04/06/2003 15:01:48
Mensagens: 1286
Localização: Porto Alegre/RS
Offline

vc tem que usar:

da uma lida sobre expressão regular se vc quiser saber o pq... heheh

[]'s

João Bier
Desenvolvedor Java
[Email]
thingol
Moderador

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

O primeiro parâmetro de replaceAll é uma expressão regular, não uma string constante.
Se você estudou expressões regulares direitinho, vai saber que "." é uma expressão
regular que bate com qualquer caracter (não só o ponto), e é por isso que
a sua string "sumiu".
Você pode fazer uma de duas coisas:
- Pôr um "\\" na frente do ".", para indicar que o ponto é um mísero ponto, não
uma expressão regular super-poderosa;

- Ou então, já que você quer chutar o pau da barraca, usar Pattern.quote para
"neutralizar" a expressão regular e torná-la uma simples string constante:


Note que "Pattern.quote" não está disponível no Java 5.0 se não me engano.
[WWW]
evandroshx
JavaBaby
[Avatar]

Membro desde: 28/05/2007 13:21:05
Mensagens: 75
Localização: São Carlos / SP
Offline


Cara, é meio louco mas tente o seguinte:



Na verdade, dessa forma vc está indicando que o ponto deve ser tratado com um caracter. O Java causa alguns problemas com alguns tipos de caracteres como ponto (.) e barras ( / \ ).

[]s

"...nada é para sempre, tudo vai recomeçar..." (Mário Quintana)"

[]s
Evandro A. S.
andre_a_s
GUJ Ranger
[Avatar]

Membro desde: 23/02/2003 01:04:53
Mensagens: 755
Localização: Santo André(SP)
Offline

Valeu pessoal.
Thingol, valeu pela explicação detalhada. Expressão regular é uma coisa que a muito tempo eu to enrolando pra estudar... hahaha.
Usei o Pattern.quote mesmo, to usando Java 6.0

Gosta de cerveja e de viagem?
Visite meu blog!
http://www.TravelAndBeer.com
[Email] [MSN] [ICQ]
thingol
Moderador

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

Eu acho que o pessoal da Sun, como sempre, andou "comendo bola" na definição de "replaceAll". Eles deveriam ter feito o seguinte:


(Note que as linguagens que têm suporte a expressões regulares, como Perl e JavaScript, usam algo específico, como "/", para indicar que a string é uma expressão regular. Por exemplo, teríamos algo como replaceAll (/./, "") ).

E se você realmente quisesse uma expressão regular (que é o caso menos freqüente), usaria:

[WWW]
dahenz
Virtual Machine Man
[Avatar]

Membro desde: 04/10/2006 16:42:13
Mensagens: 578
Offline

Neste caso.... como eu faria????




Obrigado!!

Daian Henz
[Email]
thingol
Moderador

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

Como você deve ter aprendido, String é um tipo imutável, mas as variáveis de referência para Strings não são imutáveis (a menos que denotadas com "final"). Supondo que "query" seja uma variável String:


você pode fazer a substituição assim:

ou então


Como "#" não é um caracter especial para expressões regulares não há problema em usá-lo diretamente.


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