当前位置: 首页 > 面试题库 >

标记Java中的中缀字符串

暨鹭洋
2023-03-14
问题内容

我正在用Java 实现分流场算法,这是我的AP计算机科学课的一个附带项目。我已经用Javascript实现了一个简单的脚本,只带有基本的算术表达式(加法,减法,乘法,除法,求幂)。要将其拆分为数组,我要做的是找到每个运算符(+-*/^)以及数字和括号,然后在它们周围放置一个空格,然后将其拆分为数组。例如,将infix字符串4+(3+2)制成4 + ( 3 + 2 ),然后在空白处分割。

但是,我感觉这种方法非常慢,并且在您开始添加数学函数(例如正弦,余弦,正切,绝对值等)时,实现起来变得越来越困难且效率低下。

将字符串拆分sin(4+3)-8成数组的最佳方法是["sin","(" 4,"+",3,")","-",8]什么?

我可以为此使用正则表达式,但我不太了解它们,因此我正在尝试学习它们,因此,如果这对他们是最好的解决方案,请回答者请解释一下它的作用吗?


问题答案:

尝试.split正则表达式

(?<=[^\.a-zA-Z\d])|(?=[^\.a-zA-Z\d])

它将在非字母数字字符或句点之前或之后的任何位置分割字符串。

  • (?<=[^\.a-zA-Z\d])是一个积极的眼光。如果前面的字符串匹配包含在中的子正则表达式,则它匹配两个字符之间的位置(?<=...)
    • [^\.a-zA-Z\d]是否定的角色类。它与中不包含的 单个字符 匹配[^...]
    • \.匹配字符.
    • a-z匹配a和之间的任何小写字符z
    • A-Z 是一样的,只是大写。
    • \d是的等效项[0-9],因此它匹配任何数字。
  • |是一个“或”等效。它使正则表达式与正则表达式的前一半或后一半匹配。
  • (?=[^\.a-zA-Z\d])与regex的前半部分相同,不同之处在于它是正向的。如果 以下 字符串与中包含的子正则表达式匹配,则它匹配两个字符之间的位置(?=...)

您可以像这样在Java中实现此正则表达式:

String str = "sin(4+3)-8";
String[] parts = str.split("(?<=[^\\.a-zA-Z\\d])|(?=[^\\.a-zA-Z\\d])");

结果:

["sin","(" 4,"+",3,")","-","8"]


 类似资料:
  • 问题内容: 我有一个文本文件,其中包含用’|’分隔的数据。我需要获取每个字段(以“ |”分隔)并对其进行处理。文本文件可以显示如下: ABC | DEF || FGHT 我正在使用字符串令牌生成器(JDK 1.4)来获取每个字段值。现在的问题是,我应该在DEF之后得到一个空字符串,但是我没有在DEF和FGHT之间得到空白。 我的结果应该是 -ABC,DEF,“”,FGHT, 但我正在获取 ABC,

  • 问题内容: 我有以下模板字符串:。 我还具有用于名称,发票编号和到期日的String变量-用变量替换模板中的标记的最佳方法是什么? (请注意,如果变量恰好包含令牌,则不应将其替换)。 编辑 感谢@laginimaineb和@ alan-moore, 这是我的解决方案: 问题答案: 最有效的方法是使用匹配器连续查找表达式并替换它们,然后将文本附加到字符串生成器中:

  • 给定示例类: 如何为用户名添加自定义前缀并从id继承值?例如:id的值为1,所以我希望用户名字段的值为:“REGULAR.USER.1”

  • 问题内容: 如何从字符串中删除HTML标签,以便可以输出纯文本? 问题答案: 嗯,我尝试了您的功能,并在一个小例子上工作了: 你能举一个例子吗? Swift 4和5版本:

  • 问题内容: 情况是一个字符串,它导致如下所示: 因为该函数返回文本的摘要(摘要),所以它在某些单词之后停止。在这种情况下,强标签没有关闭。但是整个字符串都包裹在一个段落中。 是否可以将上述结果/输出转换为以下内容: 我不知道从哪里开始。问题是..我在网上找到一个执行正则表达式的函数,但是它将结束标记放在字符串后面..因此它无法验证,因为我要在段落标记中使用所有打开/关闭标记。我发现的功能这样做是错

  • 但它显示。我如何解决这个问题?