# JS als ScriptEngine - alle Punkte ersetzen



## nrg (29. Sep 2010)

Hallo Zusammen,

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


```
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):







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

Danke und Grüße

nrg


----------



## Gelöschtes Mitglied 5909 (29. Sep 2010)

```
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


----------



## nrg (29. Sep 2010)

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


----------



## Gelöschtes Mitglied 5909 (29. Sep 2010)

Ich hab keine ahnung von JavaScript Regex, aber musst du da ggf. was escapen?


----------



## nrg (29. Sep 2010)

ein Backslash braucht man glauch ich bei JS: SELFHTML Forumsarchiv / 2007 / September / Punkt ersetzen

also syntaktisch ists imho so richtig: field[5].replace(/\./g, "")

Bei Java dann eben 2x (siehe Beispiel oben).

Das funktioniert ja auch.. nur halt aus den Properties nicht :/


----------

