2016-09-27 8 views
0

Javaのスクリプトエンジンマネージャを使用してlodashコマンドを実行しようとしています。私はクラスパスにlodash-4.15.0.jarファイルを追加しました。ここでJavaのScriptEngineManagerを使用してlodashコマンドを実行できません

は私のコードです:

ScriptEngineManager factory = new ScriptEngineManager(); 
ScriptEngine engine = factory.getEngineByName("nashorn"); 
engine.eval("_.camelCase('[email protected] Column'))"); 

私の期待される結果は次のとおりです。testthtColumnは、しかし、私は次のエラーを参照してください。原因一般的にはJavaScriptを使用して経験の私の不足に

Exception in thread "main" javax.script.ScriptException: ReferenceError: "_" is not defined in <eval> at line number 1 
at jdk.nashorn.api.scripting.NashornScriptEngine.throwAsScriptException(NashornScriptEngine.java:467) 
at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:451) 
at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:403) 
at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:399) 
at jdk.nashorn.api.scripting.NashornScriptEngine.eval(NashornScriptEngine.java:155) 
at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:264) 
at Tester.main(Tester.java:16) 
Caused by: <eval>:1 ReferenceError: "_" is not defined 
    at jdk.nashorn.internal.runtime.ECMAErrors.error(ECMAErrors.java:57) 
    at jdk.nashorn.internal.runtime.ECMAErrors.referenceError(ECMAErrors.java:319) 
    at jdk.nashorn.internal.runtime.ECMAErrors.referenceError(ECMAErrors.java:291) 
    at jdk.nashorn.internal.objects.Global.__noSuchProperty__(Global.java:1426) 
    at jdk.nashorn.internal.scripts.Script$\^eval\_.:program(<eval>:1) 
    at jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:637) 
    at jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:494) 
    at jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:393) 
    at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:446) 
    ... 5 more 

私はわかりませんこの問題を解決する方法。どんな助けでも大歓迎です。ありがとうございました!

答えて

0

私は、ロダッシュを動作させる代わりにJavaでこれを実行しました。直接的な答えではありませんが、これはlodashのcamelCaseメソッドと同じ答えを返します。

public String camelCaseHeaderName(String s) { 
     String result = ""; 
     boolean firstElem = false; 
     String[] words = s.split(" "); 
     for(int i = 0; i < words.length; i++) { 
      String[] finalWords = words[i].split("[^0-9a-zA-Z]+"); 
      for(int j = 0; j < finalWords.length; j++) { 
       String tmp = finalWords[j].replaceAll("[^0-9a-zA-Z]+", ""); 
       if(!firstElem) { 
        tmp = tmp.toLowerCase(); 
        firstElem = true; 
       } else { 
        tmp = WordUtils.capitalizeFully(tmp); 
       } 
       result = result.concat(tmp); 
      } 
     } 
     return result; 
    } 
関連する問題