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

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:

[code]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);
               
            } [/code]

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?

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:

[code]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);
                    
               
            } 

[/code]

É isto!