在Java类方法中嵌入JavaScript片段
我有一个java程序,可以打开、读取和写入多个文件。它还包含复杂的逻辑格式 现在我在JSFIDLE上编写了一个简单的javascript来为我进行一些树遍历和解析,这比用Java实现要容易得多 我现在的挑战是如何将这个Javascript脚本“嵌入”到我的Java方法中。我主要是一名Java程序员 Java方法的伪代码如下所示:在Java类方法中嵌入JavaScript片段,java,javascript,tree-traversal,Java,Javascript,Tree Traversal,我有一个java程序,可以打开、读取和写入多个文件。它还包含复杂的逻辑格式 现在我在JSFIDLE上编写了一个简单的javascript来为我进行一些树遍历和解析,这比用Java实现要容易得多 我现在的挑战是如何将这个Javascript脚本“嵌入”到我的Java方法中。我主要是一名Java程序员 Java方法的伪代码如下所示: <Java method begins……> String input = “ABC” //its more complex than AB
<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>
String input=“ABC”//它比ABC更复杂
字符串o1=null;
//JavaScript脚本开始,
//Javascript计算Java字符串输入
//Javascript输出被分配给JavaO1
o1=输出;
//Javascript脚本结束
//计算并处理Java字符串o1-该字符串不为null
你可以做两件事中的一件
var
s更改为类型化变量就我个人而言,我会避免为此目的将JavaScript嵌入到Java代码中,而是使用标准Java。Java中已经内置了各种各样的字符串处理库,可以用于此目的 如果您试图在Java中使用字符串运算符和正则表达式执行的操作不可行,我会非常惊讶 我还可以想象,将字符串传递给JavaScript进行处理,然后再传递回Java,会对性能造成相当大的影响。用Java来完成这一切将更有意义,也更高效
不确定如何在Java中嵌入JavaScript,但有一些JS库可能值得一看()。除非绝对必要,否则我会避免使用它。使用Java8非常简单。你可以用纳肖恩
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
方法有各种可能的参数。也可以从文件中加载脚本
在这里可以找到一个很好的教程:Java 6中引入的脚本引擎:“这是特定的Rhino doc页面,不确定它是否有用,但这里有一些我同意并试图避免使用的javascript。下面是我的JSFIDLE,以及我应该如何将其转换为Java。当我复制并粘贴代码时,会出现空指针错误。它在
jsEngine.eval(“var say=function(name){return'Hello'+name;}”)处失败代码>你有JDK8吗?在我的机器上无需任何外部DEP即可完美工作。我假设jsEngine是空的,因为“nashorn”在旧的JDK中是未知的。我将尝试安装Java 8,希望它不会破坏我的环境自2013年2月以来JDK 6没有更新。我想你应该升级:-)谢谢你到目前为止的支持,我很感激+代码段也是1!:)