tentei fazer via scape também a expressão regular…
e sim estou utilizando ‘(’ como caracter puro e não como grupo
bom vou tentar explicar melhor…
Estou fazendo uma simples calculadora e estava tratando alguns possiveis erros do usuario como
‘+.+’ ou ‘).(’ ou ‘(.)’ ou …
o codigo fonte do metodo de listener é este:
if(event.getActionCommand().equals("=")){
//retiro a redundancia de parenteses vazios da expressao
visor.setText(visor.getText().replace("()", ""));
//se a caixa de texto esta vazia nao faca nada
if(visor.getText().length() == 0)
return;
//comparo se a erro de expressao mal formada com a pontuacao
//ex: +.+, -.-, ^.*,
else if(visor.getText().matches("([*^/+-]|[(]|[)])[.]([*^/+-]|[(]|[)])"))
JOptionPane.showMessageDialog(null, "Expressao invalida - Caracter de ponto flutuante invalido", "ERROR", JOptionPane.ERROR_MESSAGE);
//confere localizacao dos parenteses na expressao
else if(visor.getText().matches("[0-9.][(]"))
JOptionPane.showMessageDialog(null, "Expressao invalida - Caracter de precendecia invalido", "ERROR", JOptionPane.ERROR_MESSAGE);
//confere se todos os parenteses abertos foram fechados
else if(parenteses != 0)
JOptionPane.showMessageDialog(null, "Expressao nao balanceada", "ERROR", JOptionPane.ERROR_MESSAGE);
//confere se o ultimo caracter escrito no visor é uma operacao
else if(visor.getText().charAt(visor.getText().length()-1) == '^' ||
visor.getText().charAt(visor.getText().length()-1) == '*' ||
visor.getText().charAt(visor.getText().length()-1) == '/' ||
visor.getText().charAt(visor.getText().length()-1) == '+' ||
visor.getText().charAt(visor.getText().length()-1) == '-')
JOptionPane.showMessageDialog(null, "Expressao incompleta", "ERROR", JOptionPane.ERROR_MESSAGE);
else
visor.setText(calculaOperacao(visor.getText()));
}
a expressão provavelmente está correta pois testei ela de varias formas…
provavelmente é algo no codigo JAVA que me falta colocar, ou usar algum outro metodo de outra classe
testei a expressao no diversas vezes no site:
http://tools.lymas.com.br/regexp_br.php
Pois como citei anteriormente é esquisito ele fazer o match “só de vez enaqundo”
3+.+, +.+
e quando coloco uma expressao com
3+3+.+
ele simplesmente ignora o match dos ultimos caracteres