Extract from string in Java

I have a line;

String value = "(5+5) + ((5+8 + (85*4))+524)"; 

How can I split / extract boolean values ​​from this line in brackets like:

 (85*4) as one (5+8 + one) as two (two+524) as three ((5+5) + three) as four ... 

Any idea? all are welcome

+6
java split regex
source share
2 answers

This cannot be done using some regular expression of the cutoff (regular expressions cannot "count brackets"). It is best to use a parser generator and parse the string into an abstract syntax tree (AST for short).

See JFlex / JavaCUP for example.


As it turns out, the CUP guide really 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, DIVIDE, 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; :} ; 
+7
source share

You can create a parser for your expression model, such as JavaCC , and then parse the expression string in the expression tree.

+4
source share

All Articles