【问题标题】:Is there a way to split() on multiple characters in Java? [closed]有没有办法在 Java 中对多个字符进行 split() ? [关闭]
【发布时间】:2021-02-20 03:43:25
【问题描述】:

我试图通过拆分括号和空格来拆分格式为“(1 + 4) * (1 - 0)”的用户输入,因此我得到了一个操作数和运算符的数组。我一直在使用 split() 方法,但我不知道如何传递两个参数。有什么建议吗?

【问题讨论】:

  • 如果没有括号或空格字符,您可以解析字符串的每个字符并将它们添加到输出数组中。
  • 请发布您使用split 的代码,其中一个参数为minimal reproducible example。也许我们可以改进 regex 以在 space括号 上拆分
  • 这两个参数是什么?
  • 看看我的StackOverflow answer 有类似的问题。

标签: java parsing text-parsing


【解决方案1】:

Split 方法采用正则表达式模式

您将传递多个字符,其字符类为 "[\\s()]" 用于空格和括号,但是,您会丢失括号,因此您的操作顺序将是未知的

【讨论】:

  • 优先顺序无关紧要,但谢谢
  • s 是做什么的?
  • \s 表示空白字符
  • 如果你有 2 + (4-5) / (6+(7*3) / 5) 这样的东西,我认为在括号上拆分会有问题
【解决方案2】:

使用正则表达式分割

您可以使用Regular Expression(简称:正则表达式)- split 方法的单个参数。

这个正则表达式包含一个用于分割字符串的模式(例如多个字符)。换句话说,您可以将所有拆分字符(空格和括号)放入一个参数中。

使用的拆分字符

在您的情况下,使用 3 个字符来拆分公式:

  • 一个空格,在\s 注明的正则表达式中(使用反斜杠来区分通常的字母's')
  • 一个左括号,在\(注明的正则表达式中(单独使用它在正则表达式中具有特殊含义,因此它也被反斜杠转义)
  • 右括号,在\) 注明的正则表达式中(单独使用它在正则表达式中具有特殊含义,因此它也被反斜杠转义)

这可以与 (boolean) 或 | 组合为匹配它们每个的完整正则表达式:\s\(\)

提示:您可以在RegexPlanet 测试这个和其他正则表达式。

工作函数

注意:在 Java 中,您必须转义字符串中的反斜杠与另一个反斜杠。所以空格正则表达式在字符串中看起来像这样:\\s

    public static String[] splitFormula(String formula) {
        return formula.split("\\(|\\)|\\s"); // split by opening-parenthese or closing-parentheses or whitespace
    }

将返回以下字符串数组{"1", "+", "4", "*", "1", "-", "0"}

运行this demo on IDEone

【讨论】:

    猜你喜欢
    • 2020-09-04
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 2015-09-15
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    相关资源
    最近更新 更多