Problema com o Replace

8 respostas
I

Pessoal, estou com problemas com o Replace, quando a String que quero substituir bem com Cifrão($) o replace retorna uma exceção.

alguem tem uma solução para este problema?

preciso utilizar o replace.

String mensagem = "Texto com Cifrão";
mensagem .replaceFirst("Cifrão","$");

An exception occurred: java.lang.StringIndexOutOfBoundsException

desde já agradeço

Igor Cardoso

8 Respostas

pablosaraiva

O símbolo $ em expressões regulares é reservado. “Matches the ending position of the string or the position just before a string-ending newline. In line-based tools, it matches the ending position of any line.”

Faça assim: mensagem.replaceFirst(“Cifrão”,"\$");

nel

Boa tarde.

Altera para:

mensagem.replace("Cifrão", "$");

ou como o Pablo indicou, que é uma melhor alternativa, eu diria.

Abraços.

R

como o pablosaraiva falo

é reservado entao voce tem que colocar as contra baras \ na frente do $

abraco

mario.fts

String mensagem = "Texto com Cifrão"; String result = mensagem.replaceFirst("Cifrão","\$"); System.out.println(result);

I

Erm, estou num mato sem cachorro!

não posso usar o Replace pois atrapalha a logica de minha aplicação.

não posso usar o "//$" pois o dado irá para um banco de dados, sendo assim a informação não seria interpletada corretamente.

e os valores são definidos pelos usuarios, então uma hora ou outra vem um "R$ 1.800,00" pro java botar no db. ai da a exceção

gato encontrado:
String valor = "R$ 1.800,00";
		String resultado = "O valor é #1";		
		
		if(valor.contains("$")){
			valor = valor.replace("$", "#S#");
			resultado.replaceFirst("#1", valor);
			resultado.replace("#S#","$");			
		} else {
			resultado.replaceFirst("#1", valor);
		}
		
		System.out.println(resultado);
qualquer solução melhor que está é super bem vinda!
ViniGodoy

Você pode usar o “\$”, porque a \ é um caracter de escape. Ela não aparecerá no resultado final.

De qualquer forma, reveja o seu programa. O usuário deveria digitar apenas valores, e não formatos.

thundercas

igor,

Tem certeza que faz sentido guardar o cifrão ‘$’ em seu banco?? Isso é bastante problemático, pois caso posteriormente você necessite deste campo do banco para realizar algum cálculo, será necessário retirar o cifrão antes.

O ideal é guardar apenas os números e, caso necessite exibir o cifrão na tela, adicione-o no momento da exibição.

Abs

I

ViniGodoy,
O campo que recebo esses valores é o nome de planos.
Alguns planos tem o valor do mesmo R$
sendo assim não posso barrar o “R$”

thundercas,
Sim, preciso armazenar essa informação! é um campo do tipo CLOB(Oracle) então não irei usar calculos usando ele como base.

Obrigado a todos!

Criado 12 de novembro de 2009
Ultima resposta 13 de nov. de 2009
Respostas 8
Participantes 7