我有一个打开,读取和写入多个文件的java程序。它还包含复杂的逻辑格式。
现在我在jsfiddle上写了一个简单的javascript here来为我做一些树遍历和解析,它比在Java中实现要容易得多。
我现在的挑战是如何将这个Javascript脚本“嵌入”我的Java方法。我主要是一个Java编码器。
Java方法的伪代码是这样的:
<Java method begins……>
String input = “ABC” //its more complex than ABC
String o1= null;
//JavaScript script begins,
//Javascript evaluates the Java string input
//Javascript output is assigned to Java o1
o1 = output;
//Javascript script ends
//maniputate and process Java string o1 - which is not null
<Java method ends>
答案 0 :(得分:2)
使用Java 8非常简单。您可以使用Nashorn。
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
public class JsTest {
@org.junit.Test
public void test() throws Exception {
ScriptEngine jsEngine = new ScriptEngineManager().getEngineByName("nashorn");
jsEngine.eval("var say = function(name) {return 'Hello ' + name;}");
Invocable jsScript = (Invocable) jsEngine;
Object result = jsScript.invokeFunction("say", "XYZ");
System.out.println(result);
}
}
eval
方法有各种可能的参数。也可以从文件加载脚本。
可在此处找到一个好的教程:http://winterbe.com/posts/2014/04/05/java8-nashorn-tutorial
答案 1 :(得分:1)
你可以做两件事之一。
将代码翻译成Java。很简单,取决于代码大小。主要是您需要将var
更改为键入的变量。
使用Rhino等Javascript引擎,您可以在其中提供Javascript并获取输出。
答案 2 :(得分:0)
就个人而言,我会避免为此目的将JavaScript嵌入到Java代码中,并使用标准Java来实现。您可以使用各种String处理库来构建Java。
如果您尝试做的事情在使用字符串运算符和正则表达式的Java中无法实现,我会感到非常惊讶。
我还想象一下,将一个String传递给JavaScript进行处理然后传回Java,会有很大的性能影响。在Java中完成所有操作会更有意义,也更有效率。
不确定您如何在Java中嵌入JavaScript,但有些JS库可能值得关注(this link to Nashorn (a bit like Rhino) may help)。除非绝对必要,否则我会避免使用它。