Avatar
vlastajuracka:

Čaues lidi mam takovej dotaz řekněme že mam String s = "5+7+8"; a potřeboaval bych nějak udělat aby se to sečetlo :p Prostě aby se to uložil za int a = 20; sem fkt docela bezmocnej budu rád za všecko diky moc :) Snad to nejak pude :D

 
Odpovědět 18.10.2015 1:50
Avatar
Taskkill
Redaktor
Avatar
Taskkill:

Ahoj můžeš si vybrat .. budu listovat varianty od nejhorší, ale nejsnadnější k té nejtěžší ale nejlepší ... (bohužel nic jako skvělá a správná varianta, která bude snadná neexistuje)

1. od jdk verze 1.6 je přítomen Javascript engine... můžeš snadno tenhle engine nastartovat a předat mu String a pak na ten String zavolat Javascriptovou funkci eval()

asi takhle:

import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;

public class Evaluator {
  public static void main(String[] args) throws Exception{
    ScriptEngineManager ScriptEnMan = new ScriptEngineManager();
    ScriptEngine ScriptEn = ScriptEnMan.getEngineByName("JavaScript");
    String expression = "20+3";
    System.out.println(ScriptEn.eval(expression));
    }
}

Špatný je, že pokud to chceš dát někam kde bude moc hodnotu Stringu měnit uživatel, tak bys na to měl rovnou zapomenout, ten javascriptovej eval() je masivní zlo!!!

2. Použij knihovnu co jsem našel na githubu https://github.com/…ewski/EvalEx

Šatný je, že pokud jsi začátečník, tak ti to dá zabrat, nebo spíš jen pokud jsi to ještě nikdy nedělal, naimportovat si knihovnu, projít dokumentaci, nevíš pořádně co se tam děje... no hlava ti půjde kolem :D

3. Pokud to poběží jen na jedné a neměnné architektuře, můžeš použít nástroje dostupné z terminálu...třeba bash na tohle má program, který můžeš pomocí process builderu zavolat, jméno neuvádím, pokud je to vážně to, pro co se rozhodneš progoogli si to dle potřeby...

Špatný je, že když ti to upgradujou, změní se chování programu, program bude nečekaně smazán, nebo odinstalován.. seš nahranej...teda tvůj program...a taky do toho nevidíš..nevíš jestli do toho stroje nějakou chybou nezaneseš něco co bys úplně nechtěl...

4. Napiš si parser, ideálně nějakej co používá rekurzi, bude výkonej, budeš rozumět tomu co se tam děje...

Špatný je, že ti to zabere dost času, a není to triviální...

Doufám, že jsem pokryl dostatečnou škálu na to aby sis udělal obrázek.

 
Nahoru Odpovědět 18.10.2015 2:37
Avatar
Taskkill
Redaktor
Avatar
Odpovídá na Taskkill
Taskkill:

Mimochodem zapoměl jsem doplnit, že existuje i pár jiných možností, třeba kompilace - využití interního prostředí javy jako kompilátoru...dost obtížné! a samozřejmě nemusíš použít konkrétní scriptovací engine (klidně to může být groovy a ne javascript... nebo cokoliv) a nebo si zvol jinou knihovnu...slyšel jsem že v javě je zabudouvaný jexl .. nezkoušel jsem, ale asi taky použitelné ;)

 
Nahoru Odpovědět 18.10.2015 2:48
Avatar
vlastajuracka:

Je díky moc :) použil sem hned to první a stačí mi to díky moc

 
Nahoru Odpovědět 18.10.2015 13:31
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.