用于复杂数学表达式的高级分词器

2024-01-11

我想标记一个由整数、浮点数、运算符、函数、变量和括号组成的字符串。下面的例子应该能说明问题的本质:

当前状态:

String infix = 4*x+5.2024*(Log(x,y)^z)-300.12

期望的状态:

 String tokBuf[0]=4 
 String tokBuf[1]=* 
 String tokBuf[2]=x 
 String tokBuf[3]=+ 
 String tokBuf[4]=5.2024 
 String tokBuf[5]=* 
 String tokBuf[6]=( 
 String tokBuf[7]=Log
 String tokBuf[8]=( 
 String tokBuf[9]=x
 String tokBuf[10]=, 
 String tokBuf[11]=y 
 String tokBuf[12]=) 
 String tokBuf[13]=^ 
 String tokBuf[14]=z 
 String tokBuf[15]=) 
 String tokBuf[16]=- 
 String tokBuf[17]=300.12

所有提示和解决方案将不胜感激。


使用 Java 流标记生成器。界面有点奇怪,但很快就会习惯:

http://docs.oracle.com/javase/7/docs/api/java/io/StreamTokenizer.html http://docs.oracle.com/javase/7/docs/api/java/io/StreamTokenizer.html

解析为请求的字符串列表的示例代码(您可能希望直接使用分词器或至少使用对象列表,以便可以直接将数字存储为 Double):

public static List<String> tokenize(String s) throws IOException {
  StreamTokenizer tokenizer = new StreamTokenizer(new StringReader(s));
  tokenizer.ordinaryChar('-');  // Don't parse minus as part of numbers.
  tokenizer.ordinaryChar('/');  // Don't treat slash as a comment start.
  List<String> tokBuf = new ArrayList<String>();
  while (tokenizer.nextToken() != StreamTokenizer.TT_EOF) {
    switch(tokenizer.ttype) {
      case StreamTokenizer.TT_NUMBER:
        tokBuf.add(String.valueOf(tokenizer.nval));
        break;
      case StreamTokenizer.TT_WORD:
        tokBuf.add(tokenizer.sval);
        break;
      default:  // operator
        tokBuf.add(String.valueOf((char) tokenizer.ttype));
    }
  }
  return tokBuf; 
}

测试运行:

System.out.println(tokenize("4*x+5.2024*(Log(x,y)^z)-300.12"));
[4.0, *, x, +, 5.2024, *, (, Log, (, x, ,, y, ), ^, z, ), -, 300.12]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于复杂数学表达式的高级分词器 的相关文章

  • Java - 将节点添加到列表的末尾?

    这是我所拥有的 public class Node Object data Node next Node Object data Node next this data data this next next public Object g
  • Final字段的线程安全

    假设我有一个 JavaBeanUser这是从另一个线程更新的 如下所示 public class A private final User user public A User user this user user public void
  • JAXb、Hibernate 和 beans

    目前我正在开发一个使用 Spring Web 服务 hibernate 和 JAXb 的项目 1 我已经使用IDE hibernate代码生成 生成了hibernate bean 2 另外 我已经使用maven编译器生成了jaxb bean
  • 多个 Maven 配置文件激活多个 Spring 配置文件

    我想在 Maven 中构建一个环境 在其中我想根据哪些 Maven 配置文件处于活动状态来累积激活多个 spring 配置文件 目前我的 pom xml 的相关部分如下所示
  • 控制Android的前置LED灯

    我试图在用户按下某个按钮时在前面的 LED 上实现 1 秒红色闪烁 但我很难找到有关如何访问和使用前置 LED 的文档 教程甚至代码示例 我的意思是位于 自拍 相机和触摸屏附近的 LED 我已经看到了使用手电筒和相机类 已弃用 的示例 但我
  • Spring @RequestMapping 带有可选参数

    我的控制器在请求映射中存在可选参数的问题 请查看下面的控制器 GetMapping produces MediaType APPLICATION JSON VALUE public ResponseEntity
  • 无法解析插件 Java Spring

    我正在使用 IntelliJ IDEA 并且我尝试通过 maven 安装依赖项 但它给了我这些错误 Cannot resolve plugin org apache maven plugins maven clean plugin 3 0
  • 如何将 pfx 文件转换为 jks,然后通过使用 wsdl 生成的类来使用它来签署传出的肥皂请求

    我正在寻找一个代码示例 该示例演示如何使用 PFX 证书通过 SSL 访问安全 Web 服务 我有证书及其密码 我首先使用下面提到的命令创建一个 KeyStore 实例 keytool importkeystore destkeystore
  • 使用Caliper时如何指定命令行?

    我发现 Google 的微型基准测试项目 Caliper 非常有趣 但文档仍然 除了一些示例 完全不存在 我有两种不同的情况 需要影响 JVM Caliper 启动的命令行 我需要设置一些固定 最好在几个固定值之间交替 D 参数 我需要指定
  • Java Integer CompareTo() - 为什么使用比较与减法?

    我发现java lang Integer实施compareTo方法如下 public int compareTo Integer anotherInteger int thisVal this value int anotherVal an
  • Eclipse Java 远程调试器通过 VPN 速度极慢

    我有时被迫离开办公室工作 这意味着我需要通过 VPN 进入我的实验室 我注意到在这种情况下使用 Eclipse 进行远程调试速度非常慢 速度慢到调试器需要 5 7 分钟才能连接到远程 jvm 连接后 每次单步执行断点 行可能需要 20 30
  • 仅将 char[] 的一部分复制到 String 中

    我有一个数组 char ch 我的问题如下 如何将 ch 2 到 ch 7 的值合并到字符串中 我想在不循环 char 数组的情况下实现这一点 有什么建议么 感谢您花时间回答我的问题 Use new String value offset
  • Google App Engine 如何预编译 Java?

    App Engine 对应用程序的 Java 字节码使用 预编译 过程 以增强应用程序在 Java 运行时环境中的性能 预编译代码的功能与原始字节码相同 有没有详细的信息这是做什么的 我在一个中找到了这个谷歌群组消息 http groups
  • Java列表的线程安全

    我有一个列表 它将在线程安全上下文或非线程安全上下文中使用 究竟会是哪一个 无法提前确定 在这种特殊情况下 每当列表进入非线程安全上下文时 我都会使用它来包装它 Collections synchronizedList 但如果不进入非线程安
  • 获取 JVM 上所有引导类的列表?

    有一种方法叫做findBootstrapClass对于一个类加载器 如果它是引导的 则返回一个类 有没有办法找到类已经加载了 您可以尝试首先通过例如获取引导类加载器呼叫 ClassLoader bootstrapLoader ClassLo
  • 静态变量的线程安全

    class ABC implements Runnable private static int a private static int b public void run 我有一个如上所述的 Java 类 我有这个类的多个线程 在里面r
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • 有没有办法为Java的字符集名称添加别名

    我收到一个异常 埋藏在第 3 方库中 消息如下 java io UnsupportedEncodingException BIG 5 我认为发生这种情况是因为 Java 没有定义这个名称java nio charset Charset Ch
  • 使用 JMF 创建 RTP 流时出现问题

    我正处于一个项目的早期阶段 需要使用 RTP 广播DataStream创建自MediaLocation 我正在遵循一些示例代码 该代码目前在rptManager initalize localAddress 出现错误 无法打开本地数据端口
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview

随机推荐

  • ASP.NET RangeValidator 与 MaximumValue 的怪异

    我有一个非常简单的 ASP NET 页面 其中包含一些输入字段和验证器 接受双精度数的一个字段如下所示
  • 未设置 Windows 默认打印机时出现“未选择默认打印机”错误

    当没有 Windows 默认打印机设置时 我需要打开打印机对话框 当设置了 Windows 默认打印机时 它可以与以下代码一起正常工作 TPrintDialog dlgPrint new TPrintDialog frmDisplayDet
  • 如何自定义引导工具提示弹出框的文本字体大小?

    我有一个弹出窗口 当您将鼠标悬停在信用卡上时 它会告诉您信用卡的 CVV 代码在哪里 问题是默认文本太大 而且我似乎找不到在哪里缩小它 我的html是 div class sprite icons icon creditcard code
  • Java 中是否有等效的字段集(HTML)?

    Java 中是否有一个元素 即 Swing AWT 或 SWT 相当于 HTML 元素fieldset 创建一个面板 创建一个标题边框 然后您就可以将所有字段组件放入其中 JPanel panel new JPanel panel add
  • 如何访问特定子节点Scenekit

    所以在我的应用程序中 你可以认为它类似于二十一点 一副牌有 52 张 你在牌的背面重复使用相同的设计 但它有不同的牌面 如 Ace Spade 2 Diamond 等 所以在我的Scenekit中 我创建了一个场景来专门设计1张卡片 然后我
  • 使用 yii 2 验证登录密码始终为 false

    这是我的validatePassword函数于models user php public function validatePassword password var dump Yii app gt getSecurity gt vali
  • Node.js / Mongoose - 错误时撤消数据库修改

    我有一个相当复杂的express路线在我的node js服务器 通过以下方式对数据库进行许多修改mongoose 我的目标是实现一种机制 在发生任何错误时恢复所有更改 我的想法是实现撤销功能catch block 但这是相当难看的 因为我必
  • AsyncTask 可变参数的用途

    Google 使用的原因是什么varargs对于参数中的AsyncTask http developer android com reference android os AsyncTask html 例如方法execute http de
  • 生成重复列表,无论顺序如何

    我想生成将列表中的索引与 槽 相关联的组合 例如 0 0 1 表示 0 和 1 属于同一个槽 而 2 属于另一个槽 0 1 1 1 表示 1 2 3 属于同一个槽 而 0 则单独存在 在这个例子中 0和1只是识别这些槽的方式 但不携带供我使
  • ADB 二进制文件已过时,并且与 Android 模拟器存在严重的性能问题(错误)

    Android Studio 产生以下错误 ADB 二进制文件位于 C Users 用户名 AppData Local Android Sdk platform tools adb exe 是 已过时并且与 Android 存在严重的性能问
  • FCM 链接在桌面通知中不起作用

    我们正在尝试通过 php 服务发送调用 FCM Rest api 的桌面通知 我们称之为https fcm googleapis com fcm send服务 传递以下有效负载 data gt notification gt title g
  • 请求范围 bean 的实例化

    Spring 中的请求作用域 bean 意味着容器为每个 HTTP 请求创建一个 bean 实例 假设我有一个 RequestScoped Bean bean Component public class RequestScopedBean
  • PagingAndSortingRepository 无法解析

    我尝试使用PagingAndSortingRepository from 春季数据 import org springframework data jpa repository JpaRepository public interface
  • Javascript 是等号引用对象还是克隆它们?

    In MyApp something BigObject我有一个内存昂贵的对象 我喜欢这样做var theObject MyApp something BigObject 我的问题是这会占用双倍的内存吗 等号 是赋值运算符 如果 RHS 是
  • phpstorm 没有看到 xdebug 但它已安装

    PhpStorm 无法看到 xdebug 但它已安装 在我的浏览器中 xdebug 工作正常 哪里有问题 错误 未建立与 xdebug 的连接 验证安装 php ini xdebug xdebug idekey PHPSTORM zend
  • 如何在vue js中使div可拖动?

    我在 vue 组件中有一个 div 我想让该组件可拖动 我检查了许多 vue 可拖动插件 但它们有一个单独的拖动组件 而不是像在角度可拖动中那样作为指令添加 请在这件事上给予我帮助 您需要将 vuedraggable 添加到节点模块中 纱线
  • 测试属性名称是否存在

    我收到此错误 运行时错误 424 需要对象 当我尝试运行此代码时 Sub SuperSaveAs Set objFSO CreateObject Scripting FileSystemObject Dim pathName As Stri
  • 使用 lldb 在 Xcode 中单步调试时调试另一个选择器

    我的代码停在 lldb 提示符处的断点处 我可以向对象发送消息并将其值打印在控制台上 lldb p self computePI float 1 3 0 哇 此时有些问题 我希望能够进入computePI作为找出哪些变量被搞乱的捷径 但是
  • 使用 jxl 修改现有 excel

    我无法使用 jxl 编辑现有的 Excel 工作表 它总是创造一个新的 谁能帮我解决一下吗 请给出一个小示例代码 jxl 旨在提高读取效率 因为这是 API 的主要用途 为了提高性能 在读取电子表格时不解释与输出信息相关的数据 例如 所有格
  • 用于复杂数学表达式的高级分词器

    我想标记一个由整数 浮点数 运算符 函数 变量和括号组成的字符串 下面的例子应该能说明问题的本质 当前状态 String infix 4 x 5 2024 Log x y z 300 12 期望的状态 String tokBuf 0 4 S