java - 如何在java中计算格式化字符串,例如'1,000,000 * 2'
问题描述
我正在制作一个程序,该程序从包含价格详细信息的单元格中提取文本,并从包含 excel 文件中价格信息的单元格中提取文本,然后进行比较。
我用 apache poi 成功提取了它们,但我不知道如何从包含价格细节信息的单元格中计算文本。
这些文本有一些模式如下。
- \3,000*641
- 存款(\10,000*105)
- 牛肉(\20,900*3) + 可乐1.25L(\3,000*2)
- 鸡肉(\22,900*3) - 折扣(\39,400)
我想有人会推荐在 apache poi 中使用公式评估。不幸的是,包含价格细节信息的单元格类型不是 FORMULA 而是 STRING。
我希望你给我看一些计算那些格式化文本的代码!
解决方案
如果您可以提取表达式并将它们格式化以删除逗号等(即.replace(",", "")
),那么您可以在 a 中运行代码ScriptEngine
以自动解析和执行表达式。
ScriptEngineManager factory = new ScriptEngineManager();
// create a JavaScript engine
ScriptEngine engine = factory.getEngineByName("JavaScript");
// evaluate JavaScript code from String
Object x = engine.eval("100 * 3");
取决于传递给 eval 方法的 String 类型,它将返回什么样的 Object。
推荐阅读
- s3cmd - 为什么 s3cmd 无法创建小写存储桶?
- java - 封装和类
- asp.net-mvc - 通知未在 ASP.NET MVC 上发送
- php - PDO fetchAll(); 绑定参数时选择语句
- java - 当您将类型作为字符串时,是否可以创建一个对象?
- liquibase - 如何在配置 liquibase.properties 以与 SAP IQ 实例一起使用时解决“SQL Anywhere 错误 -265:找不到过程 'current_schema'”?
- reactjs - 为作用域包添加类型定义
- button - 通过 Angular 10 中的按钮单击导航
- python - 如何仅在熊猫数据框中保留第 n 次出现的值
- javascript - React Native TextInput 不使用 onhange 更新功能组件中的状态