Ho bisogno di dividere stringhe contenenti espressioni matematiche di base, come ad esempio:
"(a+b)*c"
o
" (a - c)/d"
I delimitatori sono + - * /() e lo spazio e ho bisogno di loro come un token indipendente. In sostanza il risultato dovrebbe essere simile a questo:Come posso usare string # split per dividere una stringa con i delimitatori + - * /() e lo spazio e mantenerli come token extra?
"("
"a"
"+"
"b"
")"
"*"
"c"
E per il secondo esempio:
" "
"("
"a"
" "
"-"
...
Ho letto un sacco di domande su problemi simili con meno delimitatori complesse e la risposta comune è stato quello di utilizzare lo spazio a zero lookahead positivo e - dietro a.
Ti piace questa: (?<=X | ?=X)
E X rappresenta il delimitatori, ma mettendoli in una classe come questa:
[\\Q+-*()\\E/\\s]
non funziona nel modo desiderato.
Quindi, come devo formattare i delimitatori per fare in modo che la divisione funzioni come ne ho bisogno?
--- Aggiornamento ---
I caratteri della classe Word e le combinazioni più lunghe non devono essere divisi.
Ad esempio "ab" "c1" o "12".
In breve, ho bisogno dello stesso risultato di StringTokenizer, dare i parametri "- + * /()" e true.
http://stackoverflow.com/questions/2226863/whats-a-good-library-for-parsing-mathematical-expressions-in-java – Zutty
Come si deve dividere 'a + ab-c1 + 12'? È 'ab' un token o un insieme di' a * b' e il risultato per questa parte dovrebbe essere 'a'' * '' b'? I numeri sono possibili nella tua stringa? – Pshemo
"ab" dovrebbe rimanere "ab" come pure "c1" e "12" –