Java stringa e matematiche analizzatori di espressioni
-
26-09-2019 - |
Domanda
Usiamo il parser Jeks attualmente per valutare le espressioni. Non riesco a vedere un modo per valutare espressioni stringa con esso - per esempio:
IF ( "Test 1" = "Test 2")
C'è qualcosa là fuori che può valutare la stringa e matematiche espressioni in Java? Preferibilmente libero o aperto.
Grazie per qualsiasi aiuto,
Andez
Soluzione 2
La risposta è stata un post sul forum Jeks. Ho ricevuto una risposta da Manu. Ho pensato che non era attiva soprattutto perché non ho potuto registrare su di esso -. Ma che hanno risolto
Ma se qualcuno ha lo stesso problema quindi le seguenti righe di codice saranno farlo funzionare:
ExpressionParser parser; // we did have = new ExpressionParser(new JeksExpressionSyntax(), null);
JeksInterpreter interpreter; //
E per creare l'interprete:
interpreter = new JeksInterpreter() {
@Override
public Object getBinaryOperatorValue (Object binaryOperatorKey, Object param1, Object param2)
{
// Only functions may take a cell set as parameter
if ( param1 instanceof JeksCellSet || param2 instanceof JeksCellSet)
throw new IllegalArgumentException ();
// Enabled comparison between any type supported by Jeks
else if (binaryOperatorKey.equals (JeksExpressionSyntax.OPERATOR_EQUAL))
return param1 != null && param1.equals (param2)
? Boolean.TRUE : Boolean.FALSE;
// Enabled comparison between any type supported by Jeks
else if (binaryOperatorKey.equals (JeksExpressionSyntax.OPERATOR_DIFFERENT))
return param1 != null && param1.equals (param2) ? Boolean.FALSE : Boolean.TRUE;
else
return super.getBinaryOperatorValue (binaryOperatorKey, param1, param2);
}
};
parser = new ExpressionParser(new JeksExpressionSyntax(), null);
Altri suggerimenti
Ci sono un sacco di strumenti là fuori per valutare le espressioni; la risposta corretta dipenderà vostri obiettivi precisi.
Due cose che mi piacerebbe un'occhiata a:
- Commons EL , che valuta JSP 2.0 espressione lingua .
- Rhino , che valuta JavaScript (credo che questo fa parte del JDK 1.6, ma non hanno utilizzato come tale).