Manipulação de Strings - Substituição de Caracteres [Resolvido]

1 resposta
F

Bom Dia ao amigos do GUJ!

Venho aqui trazer um problema, que passei a noite pensando e não consegui resolver ainda. Eu preciso trazer em um JTextArea algumas facilidades para o cliente que vai digitar uma fórmula. Então, se ele digitar as letras C, L ou V, devo automaticamente inserir o "[" e o "]" e o cursor ficar posicionando entre os colchetes. Até aí blz (inclusive pedi ajuda aqui no fórum ontem). O cliente vai digitar entre os colchetes um número indeterminado de digitos. E Então, quando ele digitar +, -, * ou /, eu devo sair de dentro dos colchetes e inserir o operador digitado por ele fora do colchete.

Ou seja, mais ou menos assim: C[142]+V[133]*[121].

Segue o fragmento do meu código responsável por esta lógica:
public void keyReleased(KeyEvent evt){
                
                String t = jTextArea_Formula.getText().toUpperCase();      
                int pos = jTextArea_Formula.getCaretPosition()-0;  

                if((evt.getKeyChar() == 'C')||(evt.getKeyChar() == 'V')||(evt.getKeyChar() == 'L')|| 
                   (evt.getKeyChar() == 'c')||(evt.getKeyChar() == 'v')||(evt.getKeyChar() == 'l')){
                       
                        t = t + '[' + ']';    
                        jTextArea_Formula.setText(t); 
                        jTextArea_Formula.setCaretPosition(pos+1);     
                        
                }
                
                if((evt.getKeyChar() == '+')||(evt.getKeyChar() == '-')||(evt.getKeyChar() == '/')||(evt.getKeyChar() == '*')){
                    
                        t = t + evt.getKeyChar();
                        jTextArea_Formula.setText(t); 
                        jTextArea_Formula.setCaretPosition(pos+1);
                   
                }

Não sei se a maneira que fiz é a melhor. Mas está quase resolvendo meu problema. Como vocês podem ver, estou duplicando no segundo if o operador matemático digitado, para conseguir exibi-lo fora do colchetes (no final da String). Mas uma cópia do operador está ficando lá dentro do colchetes.

Então minha pergunta é: Como faço para tirar aquele operador que fica dentro do colchetes? Sabendo-se que sempre que eu encontrar o "]" na minha string eu quero remover o caracter anterior a ele (porque este será o operador que está sobrando.

Ex. de saída desejada: C[142]+V[133]*[121]
Saída Atual: C[142+]+V[133*]*[121]

Alguém me ajuda?

1 Resposta

F

Por incrivel que pareça, enquando escrevia aqui, foi surgindo a solução pra mim.

Consegui resolver. Criei duas novas strings e fiz o seguinte:

Eu sabia que queria remover sempre o caracter que aparecesse antes do "]". Mas este caracter também sempre o 3 caracter de trás para frente na String. Então fiz assim:
t = t + evt.getKeyChar();
         String nova1 = t.substring(0,t.length()-3);
         String nova2 = t.substring(t.length()-2, t.length());
         jTextArea_Formula.setText(nova1 + nova2); 
         TextArea_Formula.setCaretPosition(pos+1);

Em uma string peguei o texto que tinha até o "]" que é sempre t.length()-3 e na segunda string peguei do t.length()-2 até o t.length(). Juntei as duas strings novas e deu no texto final que eu queria.

Se alguém quiser conferir:

public void keyReleased(KeyEvent evt){
                
                String t = jTextArea_Formula.getText().toUpperCase();      
                int pos = jTextArea_Formula.getCaretPosition()-0;  

                if((evt.getKeyChar() == 'C')||(evt.getKeyChar() == 'V')||(evt.getKeyChar() == 'L')|| 
                   (evt.getKeyChar() == 'c')||(evt.getKeyChar() == 'v')||(evt.getKeyChar() == 'l')){

                        t = t + '[' + ']';    
                        jTextArea_Formula.setText(t); 
                        jTextArea_Formula.setCaretPosition(pos+1);     
                        
                }
                
                if((evt.getKeyChar() == '+')||(evt.getKeyChar() == '-')||(evt.getKeyChar() == '/')||(evt.getKeyChar() == '*')){
                    
                        t = t + evt.getKeyChar();
                        String nova1 = t.substring(0,t.length()-3);
                        String nova2 = t.substring(t.length()-2, t.length());
                        jTextArea_Formula.setText(nova1 + nova2); 
                        jTextArea_Formula.setCaretPosition(pos+1);
                        
                   
                }

É isto!

Criado 8 de fevereiro de 2008
Ultima resposta 8 de fev. de 2008
Respostas 1
Participantes 1