Salva ho un problema.
Da un area di testa ( una calcolatrice ) mi arrivano stringhe in questo formato :
5+5-2 oppure
5/8-9*9 ecc
come faccio a prendere questa stringa e permettere di avere il calcolo finale ?
Salva ho un problema.
Da un area di testa ( una calcolatrice ) mi arrivano stringhe in questo formato :
5+5-2 oppure
5/8-9*9 ecc
come faccio a prendere questa stringa e permettere di avere il calcolo finale ?
Esistono librerie apposite di "math expression parser". Se non vuoi/non puoi usarle, allora spetta a te analizzare la stringa, spezzarla in token, interpretarli, ecc...
Per uno scenario davvero semplice (niente raggruppamenti con parentesi, nessuna forma di iniettamento di variabili/funzioni), ti può bastare spezzare la stringa nei vari token, magari anche solo con StringTokenizer per ottenere "5", "/", "8" ecc...
Poi chiaramente devi analizzarli, applicare una ben precisa logica che verifichi anche la coerenza. Questa è la parte più difficile .... ma basta solo ragionare.![]()
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Puoi utilizzare due tecniche: una iterativa(Operator Precedence Parsing), l'altra ricorsiva(Recursive Descent Parser).
Qui un esempio relativo al primo metodo:
https://github.com/Vincenzo1968/OperatorPrecedenceParsing/tree/master/Java
Secondo metodo:
https://github.com/Vincenzo1968/Pars...ee/master/Java
![]()
Ultima modifica di Vincenzo1968; 24-07-2015 a 18:41
Grazie ad entrambi. ... ma per le librerie math expression parser , fanno parte della libreria math di java ?
No, il framework di Java SE non ha nulla, di per sé, per la valutazione di espressioni matematiche. Esiste, da Java 6, la Scripting API per poter utilizzare linguaggi di scripting (e un engine JavaScript è già incluso da Java 6) ma ovviamente è molto di più di un math expression parser.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Mmm.... ma per il mio caso può essere utile ?
Se si dov e posso trovare documentazione ?
La documentazione ufficiale è da qui: https://docs.oracle.com/javase/8/docs/ vedi nel diagramma il blocco "Scripting" (non il primo, ma quello nella sezione Integration Libraries). Trovi sicuramente anche articoli in rete ecc...
Ecco un piccolo esempio (Java 6+):
codice:import javax.script.*; public class ProvaJavaScript { public static void main(String[] args) { ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByExtension("js"); // JavaScript try { engine.eval("function migliaToChilometri(miglia) { return miglia / 0.62137; }"); Number metri = (Number) engine.eval("migliaToChilometri(15) * 1000"); System.out.println("15 miglia = " + metri + " metri"); } catch (Exception e) { System.err.println(e); } } }
Output:
15 miglia = 24140.206318296667 metri
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Sì, le varie versioni in overload di eval() valutano ed eseguono uno script (poi può essere da un String o da un Reader, anche da file). Ma ti ripeto che è molto di più ... non è solo un banale valutatore di espressioni matematiche. Qui si tratta di linguaggi di scripting, come JavaScript (non so se l'hai mai usato nello sviluppo di pagine web).
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
No mai utilizzato javascript ... cmq grazie mille .... per lo scopo che serve a me va più che benecmq mi documentero meglio sulla javadoc