为什么我的字符串按正则表达式拆分不起作用?

Why is my String splitting by a regex not working?

我有一个输入字符串,例如“5+3”。 现在我想用正则表达式拆分它:

String[] rawTokens = input.split("\+|\-|\*|/|\d+");

标记数组现在应该是 [5, +, 3] 但它是空的。

有什么问题?

要拆分您可以使用的字符串:

"\+|\*|/|-|\d+"

"\d+|[+*/-]"

    try {
        String input = "5+3";
        ArrayList<String> list = new ArrayList<String>();
        Pattern pattern = Pattern.compile("\+|\*|/|-|\d+");
        Matcher matcher = pattern.matcher(input);
        while (matcher.find()) {
            list.add(matcher.group());
        }
        String[] rawTokens = list.toArray(new String[0]);
        JOptionPane.showMessageDialog(null, rawTokens);
    } catch (PatternSyntaxException ex) {
    }

问题有三方面:

  1. 与传递给 split 的模式匹配的输入被 消耗(丢弃),匹配之间剩下的内容作为数组返回
  2. 您的模式匹配输入的每个字符,所以它全部消耗(丢弃)只留下空白(零长度字符串)来填充数组
  3. 从返回的数组中自动截断尾随空白

那么,如何解决...

您需要一个 匹配任何输入字符的模式,因为您不想消耗任何内容。相反,您需要匹配 between 要提取的术语。你需要四处看看:

String[] rawTokens = input.split("\b");

此模式匹配 "word boundaries"(在本例中为非数字和数字之间,反之亦然)。

查看 live demo 生成您想要的输出。