[RESOLVIDO] Problema para realizar substituição em String

2 respostas
Jubarius

Bom dia a todos

Como mencionei no tópico http://www.guj.com.br/java/279904-resolvidomudar-cor-texto-em-jtexarea-ou-jtextpane, preciso criar um editorzinho de texto para que o usuário possa inserir um texto, algo como um XML. Agora que consegui mudar as cores das palavras, estou com problemas para realizar a substituição de um texto por outro em uma String. Aparentemente deveria ser algo simples, mas não sei porque não está funcionando. Aqui vai o código:

private void substituiCodigo(String nomeComando, String comando){
                //Aqui eu recupero o texto que está na tela
		String codigo = tela.getCodTa();
                //Aqui eu crio a tag de fechamento. Algo do tipo: comando <nome> se transforma em <\nome>
		String fechaComando = nomeComando.substring(0,1) + "\\" + nomeComando.substring(1, nomeComando.length());

               //Se  houver algum texto então
		if(!codigo.isEmpty()){
			int iniComando = 0;
			int fimComando = 0;
                        
                        //Verifica se o comando  está inserido no código
			if(codigo.contains(nomeComando)){
                               //Pega os índices de começo e fim do comando
				iniComando = codigo.indexOf(nomeComando);
				fimComando = codigo.indexOf(fechaComando)+ fechaComando.length();			
			}else{
                                //Se não tiver o comando então insere no final
				codigo += nomeComando + " " + fechaComando;
			}
                        
                        //Retira a substring que contém o comando que vai ser substituido
			String sub = (codigo.substring(iniComando, fimComando));

                        //Verifica se a substring está vazia (no caso de quando se insere o comando
			sub = (sub.isEmpty() ? " " : sub);

                        //Aqui deveria ser realizada a substituição, mas não acontece nada. No debug do Eclipse os textos são iguais
			codigo = codigo.replaceAll(sub, nomeComando + comando + Pattern.quote(fechaComando));
		}else{
			codigo = nomeComando + comando + fechaComando;
		}
		tela.setComando(codigo);
	}

Acredito que tenha algum problema com as barras que eu insiro para criar o comando de fechamento ("\"), mas não tenho certeza e também não sei como contornar.

Espero que alguém possa me ajudar.

Inté…

2 Respostas

B

Use replace, não replaceAll (que requer uma expressão regular).
É que vários caracteres são especiais em expressões regulares, e não sei o que contém a variável “sub”, mas provavelmente deve conter algum caracter que é especial em uma expressão regular.

Jubarius

Amigo bezier curve obrigado

Deu certinho, parece até mágica, feitiçaria :smiley: . Agora ta funcionando certinho.

Mais uma vez obrigado pela força,

Inté…

Criado 13 de agosto de 2012
Ultima resposta 13 de ago. de 2012
Respostas 2
Participantes 2