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:
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 ( / \ ).
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
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 bobo
public String replaceAll (String stringFixa, String stringSubstituicao);
// caso mais poderoso, mas menos comum
public String replaceAll (Pattern padrao, String stringSubstituicao);
(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:
String query = "select anfotero from enantiomeros #acumAndClauses#";