Java中如何将字符串转换为函数?

2024-01-02

stackoverflow上有一个类似标题的问题here https://stackoverflow.com/questions/41283897/how-to-convert-string-into-math-function-just-once,但我想问是否可以在Java中做类似的事情。

我想做一些类似于 desmos 的东西,就像那家伙在 Javascript 中所做的那样,但我想使用 lwjgl 2 在 Java 中制作它。我是 Java 新手,我想知道是否可以将一段转换为字符串到方法中。是否可以?

我寻找了可能的选择,我发现你可以制作自己的 Javaeval()方法。但我不想更换x在窗口宽度的每个像素的字符串中。

提前致谢。


您需要的是一个可以计算表达式的引擎/库,在执行时定义为字符串。如果您将评估代码包装到函数调用中(例如 lambda 函数),您将得到您所需要的。

选项1:您可以使用exp4j http://www.objecthunter.net/exp4j/. exp4j是一个占用空间很小的库,能够在执行时评估表达式和函数。这是一个例子:

Expression e = new ExpressionBuilder("3 * sin(y) - 2 / (x - 2)")
        .variables("x", "y")
        .build()
        .setVariable("x", 2.3)
        .setVariable("y", 3.14);
double result = e.evaluate();

选项2:您可以使用Java的脚本引擎 https://docs.oracle.com/javase/8/docs/api/javax/script/ScriptEngine.html。您可以使用它来计算定义的表达式,例如在 JavaScript 中:

ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
Object result = engine.eval("sin(1.25)");

选项 3:编译为本机 Java。通过这种方法,您可以使用模板生成 .java 文件,其中包含包含表达式的类。比你调用Java编译器。这种方法的缺点是实现上有一定的复杂性,并且有一些初始延迟(直到类被编译),但性能是最好的。以下是一些可供探索的链接:

  • 使用 javax.tools 创建动态应用程序 http://www.ibm.com/developerworks/java/library/j-jcomp/
  • 尤其javax.tools.编译器 http://docs.oracle.com/javase/6/docs/api/javax/tools/JavaCompiler.html

注意事项无论您选择哪种方法,请记住您需要考虑安全性。允许用户输入可以在没有安全限制的情况下进行评估的代码可能非常危险。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java中如何将字符串转换为函数? 的相关文章

  • 如何在日期选择器中设置不在当前月份的单元格的样式

    我目前正在为我的 JavaFX 应用程序制作注册表 问题是 当日期选择器中的单元格不在页面的月份上时 我想让该单元格变灰 让我们看看我当前的日期选择器 我的日期选择器 正如您所看到的 我希望下个月的日期 27 日 28 日 30 日以及 1
  • 在 JTable 中移动行

    我使用 MVC 模式 并且有一个如下所示的 JTable List
  • 热重载在docker中运行的java程序

    我开发了一个java程序 应该在docker中运行 然而 我在调试docker中运行的java程序时遇到了很多痛苦 我在网上搜索 一些教程提出了像 spring dev tools 这样的工具 因为我的java程序是基于spring boo
  • JavaMail Gmail 问题。 “准备启动 TLS”然后失败

    mailServerProperties System getProperties mailServerProperties put mail smtp port 587 mailServerProperties put mail smtp
  • 我需要在 Spring 中检查每个控制器中的有效会话吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 假设在 Spring Mvc 的 Web 应用程序中 我们是否需要检查每个控制器或 jsps 中的有效会话 我该如何解决 MVC 中的
  • ElasticBeanstalk Java,Spring 活动配置文件

    我正在尝试通过 AWS ElasticBeanstalk 启动 spring boot jar 一切正常 配置文件为 默认 有谁知道如何为 java ElasticBeanstalk 应用程序 不是 tomcat 设置活动配置文件 spri
  • Android Studio 在编译时未检测到支持库

    由于 Android Studio 将成为 Android 开发的默认 IDE 因此我决定将现有项目迁移到 Android studio 中 项目结构似乎不同 我的项目中的文件夹层次结构如下 Complete Project gt idea
  • manifest.mf 文件的附加内容的约定?

    Java JAR 中的 MANIFEST MF 文件是否有任何超出 MANIFEST MF 约定的约定 JAR规范 http download oracle com javase 1 4 2 docs guide jar jar html
  • IntelliJ IDEA 创建的 JAR 文件无法运行

    我在 IntelliJ 中编写了一个跨越几个类的程序 当我在 IDE 中测试它时它运行良好 但是 每当我按照教程将项目制作成 jar 可执行文件时 它就不会运行 双击 out 文件夹中的文件时 该文件不会运行 并显示 无法启动 Java J
  • CXF Swagger2功能添加安全定义

    我想使用 org apache cxf jaxrs swagger Swagger2Feature 将安全定义添加到我的其余服务中 但是我看不到任何相关方法或任何有关如何执行此操作的资源 下面是我想使用 swagger2feature 生成
  • java.io.IOException: %1 不是有效的 Win32 应用程序

    我正在尝试对 XML 文档进行数字签名 为此我有两个选择 有一个由爱沙尼亚认证中心为程序员创建的库 还有一个由银行制作的运行 Java 代码的脚本 如果使用官方 认证中心 库 那么一切都会像魅力一样进行一些调整 但是当涉及到银行脚本时 它会
  • Microsoft Graph 身份验证 - 委派权限

    我可以使用 Microsoft Graph 访问资源无需用户即可访问 https developer microsoft com en us graph docs concepts auth v2 service 但是 此方法不允许我访问需
  • 请求位置更新参数

    这就是 requestLocationUpdates 的样子 我使用它的方式 requestLocationUpdates String provider long minTime float minDistance LocationLis
  • 无法理解 Java 地图条目集

    我正在看一个 java 刽子手游戏 https github com leleah EvilHangman blob master EvilHangman java https github com leleah EvilHangman b
  • 如何将文件透明地传输到浏览器?

    受控环境 IE8 IIS 7 ColdFusion 当从 IE 发出指向媒体文件 例如 mp3 mpeg 等 的 GET 请求时 浏览器将启动关联的应用程序 Window Media Player 我猜测 IIS 提供文件的方式允许应用程序
  • 从 android 简单上传到 S3

    我在网上搜索了从 android 上传简单文件到 s3 的方法 但找不到任何有效的方法 我认为这是因为缺乏具体步骤 1 https mobile awsblog com post Tx1V588RKX5XPQB TransferManage
  • Springs 元素“beans”不能具有字符 [children],因为该类型的内容类型是仅元素

    我在 stackoverflow 中搜索了一些页面来解决这个问题 确实遵循了一些正确的答案 但不起作用 我是春天的新人 对不起 这是我的调度程序 servlet
  • 将2-3-4树转换为红黑树

    我正在尝试将 2 3 4 树转换为 java 中的红黑树 但我无法弄清楚它 我将这两个基本类编写如下 以使问题简单明了 但不知道从这里到哪里去 public class TwoThreeFour
  • com.jcraft.jsch.JSchException:身份验证失败

    当我从本地磁盘上传文件到远程服务器时 出现这样的异常 com jcraft jsch JSchException Auth fail at org apache tools ant taskdefs optional ssh Scp exe
  • java8 Collectors.toMap() 限制?

    我正在尝试使用java8Collectors toMap on a Stream of ZipEntry 这可能不是最好的想法 因为在处理过程中可能会发生异常 但我想这应该是可能的 我现在收到一个我不明白的编译错误 我猜是类型推理引擎 这是

随机推荐

  • 无法在 Next 中传递 props

    我正在使用 Next Js React SSR 制作服务器端渲染应用程序 Index js 只需在index中调用另一个组件Layout即可 import Layout from layout import React from react
  • 记录 CMake 模块的正确方法是什么?

    快速的 Google 搜索 实际上许多相当广泛的 Google 搜索 无法解释如何正确记录 CMake 模块 我正在寻找一种记录自定义 CMake 模块的方法 以便它们与cmake help module
  • Django Test 模拟 ImageField 阻止上传或测试后清理

    我正在为我的项目开发一个测试用例 涉及一些图像和文件字段 有些对象加载了固定装置 有些对象是在测试期间创建的 我用 InMemoryUploadedFile 模拟了我的图像 创建新的测试对象时 正在上传模拟图像 到 MEDIA ROOT 目
  • 如果你的基类有一个虚拟析构函数,你自己的析构函数自动是虚拟的

    我知道标题的说法是正确的 那么常规函数呢 例如 class Father virtual void foo class Son public Father void foo class GrandSon public Son void fo
  • 让 Karma、6to5ify 和 Istanbul 合作

    我有 Browserify 6to5ify 和 Karma 可以很好地发挥作用 成功运行我的规范 然而 当我添加代码覆盖率时 事情就变糟了 我尝试了几种方法 Add browserify istanbul转换为我的 karma conf j
  • 如果我想添加类型化属性,子类化 NSNotification 是正确的途径吗?

    我正在尝试子类化NSNotification Apple 的文档NSNotification陈述以下内容 NSNotification是一个没有实例变量的类簇 像这样 你必须子类化NSNotification并重写原始方法name obje
  • 无法选择 id=":1" 的 div

    对网络东西有点菜鸟 但我有一个带有此标签的 div div class 我已经测试过我的 jQuery 可以正常工作 当前使用版本 2 1 3 我已经测试了许多其他关于选择器中冒号的 SO 帖子中推荐的选择器 然后是其他一些 我已经分别尝试
  • ruby - 如何在 minitest 示例中使用标签

    I have require minitest spec require minitest autorun require minitest tags require rspec expectations describe One happ
  • 在一行中多次使用相同模式的正则表达式

    我正在寻找的模式是这样的 TXT txt 该模式可以在任何给定行中多次出现 我想要么提取模式的每个实例 要么使用 sed 或其他任何东西 删除每个实例周围的文本 Thanks 您可以将 Perl 用作 cat file foo TXT1 t
  • 如何在 Xcode 7 中使用对象库的堆栈视图

    我最近安装了Xcode 7 测试版并发现了一些东西new在对象库中 例如 水平堆栈视图和垂直堆栈视图 当我在其中放入一些控件时 stackview 似乎可以调整大小 根据控制尺寸 当我呈现更多控制堆栈时 似乎从堆栈视图开始自动调整 任何一个
  • 获取os.Error值的一种方法——字符串值(Go)

    如何获取字符串值os Error 也就是说 分配给一个变量 例如 package main import errors fmt func main err errors New an error message s err Error fm
  • Laravel: array_merge(): 参数 #2 不是数组错误

    异常开始出现在所有视图中 当我尝试运行时composer update 它总是以 error type ErrorException message array merge Argument 2 is not an array file l
  • ArrayList#size() 大于对象的实际数量

    我的 Android 应用程序中有一个 ArrayList 其中有 2 个项目 然而 它的 size 方法返回 3 我知道这听起来非常简单和愚蠢 但它是这样的 为什么会出现这种情况呢 ArrayList 的大小如何返回错误的数字 当我迭代列
  • 无需数据库即可存储数据?

    如果我想存储电子邮件 但没有数据库 例如 MySQL 我该怎么办 数据应该可以从 PHP 访问和写入 但常规 访问者 不得看到该数据 希望你能帮忙 您可以将它们放入文件中 data Defined somewhere file put co
  • 优先 Web SDK 与 REST API

    使用 Priority 的新工具开发网站时 在哪些情况下使用 Web SDK 访问 Priority 会比使用 REST API 更好 反之亦然又如何呢 这取决于您的需求 REST API 主要用于与其他应用程序集成 而 WEB SDK 用
  • 在 Mercurial 中指定点作为修订版

    我发现一些 Mercurial 命令的修订版被指定为点 例如 hg revert all r hg update C r hg pull r 这个点的含义是什么 它对应哪个版本 hg help revisions says 保留名称 指示工
  • 在 AngularJS 应用程序中预填充远程数据的最佳方法

    在我的 AngularJS 应用程序中 我需要从远程 REST 端点检索多个静态数据集合 这些数据集合将作为静态查找列表在整个应用程序生命周期中使用 我希望所有这些列表都在初始应用程序启动时填充 并保留并可供多个控制器使用 我不想动态加载任
  • 如何导出驻留在给定 Domino 服务器上的数据库列表?

    我有一台 Lotus Domino 服务器 上面有数量惊人的 Domino 数据库 排列在各个文件夹中 是否有某种方法可以以某种电子表格格式导出所有这些数据库及其标题和创建者姓名的列表 我拥有 Domino Admin 和 Domino D
  • 开发多个 Visual Studio 2010 扩展

    我正在单独的解决方案中开发几个独立的 Visual Studio 扩展 当我打开其中一个并在调试器中启动实验实例时 其他解决方案 未打开 的其他扩展也会被加载 必须有一种方法可以一次仅在实验实例中启动一个扩展 特别是您当前正在开发的扩展 对
  • Java中如何将字符串转换为函数?

    stackoverflow上有一个类似标题的问题here https stackoverflow com questions 41283897 how to convert string into math function just on