da uma lida sobre expressão regular se vc quiser saber o pq… heheh
[]'s
T
thingol
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;
string=string.replaceAll("\.","");
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:
string=string.replaceAll(Pattern.quote("."),"");
Note que “Pattern.quote” não está disponível no Java 5.0 se não me engano.
evandroshx
Cara, é meio louco mas tente o seguinte:
string=string.replaceAll("\.","");
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
andre_a_s
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
T
thingol
Eu acho que o pessoal da Sun, como sempre, andou “comendo bola” na definição de “replaceAll”. Eles deveriam ter feito o seguinte:
// caso mais comum e bobopublicStringreplaceAll(StringstringFixa,StringstringSubstituicao);// caso mais poderoso, mas menos comumpublicStringreplaceAll(Patternpadrao,StringstringSubstituicao);
(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:
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:
Stringquery="select anfotero from enantiomeros #acumAndClauses#";
você pode fazer a substituição assim:
query=query.replace("#acumAndClauses#","and 1=1");// Java 5.0 ou posterior
ou então
query=query.replaceAll("#acumAndClauses#","and 1=1");// Java 1.4 ou posterior
Como “#” não é um caracter especial para expressões regulares não há problema em usá-lo diretamente.