Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 23

Discussione: calcolo su una stringa

  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    93

    calcolo su una stringa

    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 ?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da banino84 Visualizza il messaggio
    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.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    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

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    93
    Grazie ad entrambi. ... ma per le librerie math expression parser , fanno parte della libreria math di java ?

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da banino84 Visualizza il messaggio
    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.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    93
    Mmm.... ma per il mio caso può essere utile ?
    Se si dov e posso trovare documentazione ?

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da banino84 Visualizza il messaggio
    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.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    93
    Quote Originariamente inviata da andbin Visualizza il messaggio
    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

    Quindi da quello che sto capendo engine.eval funge come una specie di parser?

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da banino84 Visualizza il messaggio
    Quindi da quello che sto capendo engine.eval funge come una specie di parser?
    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.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    93
    No mai utilizzato javascript ... cmq grazie mille .... per lo scopo che serve a me va più che bene cmq mi documentero meglio sulla javadoc

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.