首页 > 解决方案 > 如何使扫描仪返回分隔符作为标记

问题描述

我试图用来java.util.Scanner标记一个算术表达式,其中分隔符可以是:

例子

给定这个表达式:

12 + (ab-bc*3)

我希望 Scanner 返回这些令牌:

代码

到目前为止,我只能:

但现在我被困住了。

标签: javaregexjava.util.scannerdelimiter

解决方案


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

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 演示

正则表达式匹配

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

请参阅正则表达式演示(出于演示目的转换为 PCRE)。


推荐阅读