Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java类方法中嵌入JavaScript片段_Java_Javascript_Tree Traversal - Fatal编程技术网

在Java类方法中嵌入JavaScript片段

在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程序,可以打开、读取和写入多个文件。它还包含复杂的逻辑格式

现在我在JSFIDLE上编写了一个简单的javascript来为我进行一些树遍历和解析,这比用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>

String input=“ABC”//它比ABC更复杂
字符串o1=null;
//JavaScript脚本开始,
//Javascript计算Java字符串输入
//Javascript输出被分配给JavaO1
o1=输出;
//Javascript脚本结束
//计算并处理Java字符串o1-该字符串不为null

你可以做两件事中的一件

  • 将代码翻译成Java。非常简单,这取决于代码大小。主要需要将
    var
    s更改为类型化变量

  • 使用一个Javascript引擎,比如,你可以将你的Javascript输入其中,它就会得到输出


  • 就我个人而言,我会避免为此目的将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!:)