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

时间:2015-05-19 16:00:45

标签: java regex split

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

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

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

有什么问题?

2 个答案:

答案 0 :(得分:1)

分割您可以使用的字符串:

"\\+|\\*|/|-|\\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 :(得分:1)

问题是三方面的:

  1. 匹配传递给split的模式的输入消耗(扔掉),匹配之间的剩余内容将作为数组返回
  2. 您的模式匹配输入的每个字符,因此全部消耗(丢弃)只留下空白(零长度字符串)来填充数组
  3. 从返回的数组
  4. 中静默截断尾随空格

    现在,如何解决......

    你需要一个匹配任何输入字符的模式,因为你不想要消耗任何东西。相反,您需要匹配 要提取的术语。你需要环顾四周:

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

    此模式匹配&#34;字边界&#34; (在这种情况下,在非数字和数字之间,反之亦然)。

    请参阅生成所需输出的live demo