JS als ScriptEngine - alle Punkte ersetzen

nrg

Top Contributor
Hallo Zusammen,

ich verwende die JavaScriptEngine um einen dynamischen Textconverter zu erstellen. Jetzt habe ich folgendes Problem:

Java:
    public static void main (String[] args) {
        ScriptEngineManager manager = new ScriptEngineManager ();
        ScriptEngine engine = manager.getEngineByName ("js");
        String datum = "22.01.2008";
        engine.put("datum", datum);
        String script = "datum.replace(/\\./g, '')";
        try {
            System.out.println(engine.eval(script));
        } catch (ScriptException e) {
            e.printStackTrace();

dieser Code funktioniert ohne Probleme. Wie zu erwarten, werden im String datum alle Punkte ersetzt. Jetzt ist es aber in meinem Tool so, dass die Befehle von Properties gelesen werden.

field7 = field[5].replace(/\\./g, '')

field ist das Array der Eingabedatei. field7 wäre dann der Platz für die Ausgabe. Leider funktioniert das Ganze hier nicht mehr so toll 🙁.
Das ist allerdings nur mit dem Punkt und replaceAll ein Problem. Ein einzelner Punkt würde ohne Probleme mit '.', '' funktionieren. field[5] ist mit 21.09.10 initialisiert (habs mir mal ausgeben lassen).

Exception:
javax.script.ScriptException: sun.org.mozilla.javascript.internal.EvaluatorException: The choice of Java constructor replace matching JavaScript argument types (function,string) is ambiguous; candidate constructors are:
class java.lang.String replace(java.lang.CharSequence,java.lang.CharSequence)
class java.lang.String replace(char,char) (<Unknown source>#1) in <Unknown source> at line number 1
at com.sun.script.javascript.RhinoScriptEngine.eval(Unknown Source)
at com.sun.script.javascript.RhinoScriptEngine.eval(Unknown Source)
at javax.script.AbstractScriptEngine.eval(Unknown Source)
at de.pland.pdc.util.parser.Parser.parse(Parser.java:48)
at de.pland.pdc.load.Process.coreProcess(Process.java:276)
at de.pland.pdc.load.Process.fileProcess(Process.java:193)
at de.pland.pdc.load.Process.start(Process.java:113)
at de.pland.pdc.load.Main.main(Main.java:76)

die Funktion kommt imho auch richtig an (s. Debugscreenshot):
scriptengineaqu7.jpg



Habs schon mit sämtlichen Variationen ausprobiert aber bis jetzt weniger erfolgreich.
Weiß jemand von euch Rat?

Danke und Grüße

nrg
 
Code:
candidate constructors are:
class java.lang.String replace(java.lang.CharSequence,java.lang.CharSequence)
class java.lang.String replace(char,char) (<Unknown source>#1) in <Unknown source> at line number 1

Das deutet darauf hin, dass er sich nicht entscheiden kann ob er das ganze als char oder String aufrufen soll. Probier mal aus den ' (single quote) ein " (double quote) zu machen. Dann sollte er es als String erkennen
 
erst mal danke für die schnelle Antwort.

Habe es mit Doublequotes probiert: field[5].replace(/\./g, "")
In den Properties stehts demnach so: field[5].replace(/\\./g, "")

Leider immernoch die selbe Exception 🙁
 
Ich hab keine ahnung von JavaScript Regex, aber musst du da ggf. was escapen?
 

Zurück
Oben