Extract from strings in Java
•
Java
I have a string;
String value = "(5+5) + ((5+8 + (85*4))+524)";
How to split / extract the logical value from this string in parentheses is;
(85*4) as one (5+8 + one) as two (two+524) as three ((5+5) + three) as four ...
Any ideas? Everything is very popular
Solution
This cannot be done using some cutter regular expressions (regular expressions cannot "evaluate parentheses") Your best choice is to use some parser generators and parse the string into abstract syntax tree (AST)
For example, see jflex / javacup
It turns out that cup manual actually has an example covering your situation:
// CUP specification for a simple expression evaluator (w/ actions) import java_cup.runtime.*; /* Preliminaries to set up and use the scanner. */ init with {: scanner.init(); :}; scan with {: return scanner.next_token(); :}; /* Terminals (tokens returned by the scanner). */ terminal SEMI,PLUS,MINUS,TIMES,DIVIDE,MOD; terminal UMINUS,LPAREN,RPAREN; terminal Integer NUMBER; /* Non-terminals */ non terminal expr_list,expr_part; non terminal Integer expr; /* Precedences */ precedence left PLUS,MINUS; precedence left TIMES,MOD; precedence left UMINUS; /* The grammar */ expr_list ::= expr_list expr_part | expr_part; expr_part ::= expr:e {: System.out.println("= " + e); :} SEMI ; expr ::= expr:e1 PLUS expr:e2 {: RESULT = new Integer(e1.intValue() + e2.intValue()); :} | expr:e1 MINUS expr:e2 {: RESULT = new Integer(e1.intValue() - e2.intValue()); :} | expr:e1 TIMES expr:e2 {: RESULT = new Integer(e1.intValue() * e2.intValue()); :} | expr:e1 DIVIDE expr:e2 {: RESULT = new Integer(e1.intValue() / e2.intValue()); :} | expr:e1 MOD expr:e2 {: RESULT = new Integer(e1.intValue() % e2.intValue()); :} | NUMBER:n {: RESULT = n; :} | MINUS expr:e {: RESULT = new Integer(0 - e.intValue()); :} %prec UMINUS | LPAREN expr:e RPAREN {: RESULT = e; :} ;
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码