如何将 Scanner return 分隔符作为标记

How to make Scanner return delimiters as tokens

我正在尝试使用 java.util.Scanner 来标记算术表达式,其中分隔符可以是:

例子

给出这个表达式:

12 + (ab-bc*3)

我希望扫描器return这些标记:

代码

到目前为止,我只能:

但现在我卡住了。

匹配 方法允许您在此处使用更简单的正则表达式:

String text = "12 + (ab-bc*3)";
List<String> results = Pattern.compile("\p{Punct}|\w+").matcher(text)
    .results()
    .map(MatchResult::group)
    .collect(Collectors.toList());
System.out.println(results); 
// => "12", "+", "(", "ab", "-", "bc", "*", "3", ")"

参见 Java demo

正则表达式匹配

  • \p{Punct} - 标点和符号字符
  • | - 或
  • \w+ - 1+ 个字母、数字或 _ 个字符。

请参阅 regex demo(出于演示目的已转换为 PCRE)。