gpt4 book ai didi

java - 如何使扫描仪返回定界符作为标记

转载 作者:行者123 更新时间:2023-11-29 08:20:54 25 4
gpt4 key购买 nike

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

  • 空格(\s+\p{Space}+),应该丢弃
  • 标点符号 (\p{Punct}),应作为标记返回

例子

给出这个表达式:

12 + (ab-bc*3)

我希望 Scanner 返回这些标记:

  • 12
  • +
  • (
  • ab
  • -
  • bc
  • *
  • 3
  • )

代码

到目前为止,我只能:

  • 吃掉所有的标点字符(不是我想要的):
    • new Scanner("12 + (ab-bc*3)").useDelimiter("\\p{Space}+|\\p{Punct}").tokens().collect(Collectors. toList())
    • 结果:“12”、“”、“”、“”、“ab”、“bc”、“3”
  • 使用 positive lookahead 取得部分成功
    • new Scanner("12 + (ab-bc*3)").useDelimiter("\\p{Space}+|(?=\\p{Punct})").tokens()。收集(收集器。toList())
    • 结果:"12", "+", "(ab", "-bc", "*3", ")"

但现在我卡住了。

最佳答案

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

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)。

关于java - 如何使扫描仪返回定界符作为标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58623835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com