gpt4 book ai didi

Java 正则表达式模式和匹配器

转载 作者:行者123 更新时间:2023-12-01 18:39:38 25 4
gpt4 key购买 nike

我尝试使用 Mathcer 解析此字符串:“2+30*4+(5+6)*7”

使用此模式:“\d*|[()+*-]”

由于某种原因,匹配器正确地分割了字符串,但是当检查分割后的字符串时,它没有正确地分割它们,除了数字之外的任何内容都留下空字符串:

String s = "2+30*4+(5+6)*7";        
Pattern p = Pattern.compile("\\d*|[()+*-]");
Matcher m = p.matcher(s);
while (m.find()) {
System.out.print("Start index: " + m.start());
System.out.print(" End index: " + m.end() + " ");
System.out.println("-----> " + m.group());
}

这给出了以下输出:

Start index: 0 End index: 1 -----> 2
Start index: 1 End index: 1 ----->
Start index: 2 End index: 4 -----> 30
Start index: 4 End index: 4 ----->
Start index: 5 End index: 6 -----> 4
Start index: 6 End index: 6 ----->
Start index: 7 End index: 7 ----->
Start index: 8 End index: 9 -----> 5
Start index: 9 End index: 9 ----->
Start index: 10 End index: 11 -----> 6
Start index: 11 End index: 11 ----->
Start index: 12 End index: 12 ----->
Start index: 13 End index: 14 -----> 7
Start index: 14 End index: 14 ----->

我不明白为什么,例如在第二行中,结束索引是 1(而不是 2),导致空字符串: 开始索引:1 结束索引:1 ----->

顺便说一句,当我将模式的顺序更改为“[()+-]|\d”时,它工作正常......

最佳答案

\\d* 允许使用空字符串因为它意味着零个或多个数字。如果您不想查找数字为零(空)的字符串,请更改 \\d*\\d+ .

演示

String s = "2+30*4+(5+6)*7";        
Pattern p = Pattern.compile("\\d+|[()+*-]");
Matcher m = p.matcher(s);
while (m.find()) {
System.out.print("Start index: " + m.start());
System.out.print(" End index: " + m.end() + " ");
System.out.println("-----> " + m.group());
}

输出:

Start index: 0 End index: 1 -----> 2
Start index: 1 End index: 2 -----> +
Start index: 2 End index: 4 -----> 30
Start index: 4 End index: 5 -----> *
Start index: 5 End index: 6 -----> 4
Start index: 6 End index: 7 -----> +
Start index: 7 End index: 8 -----> (
Start index: 8 End index: 9 -----> 5
Start index: 9 End index: 10 -----> +
Start index: 10 End index: 11 -----> 6
Start index: 11 End index: 12 -----> )
<小时/>

如果您对代币的仓位不感兴趣,您也可以split每个 + 之前或之后- * / ( )喜欢

String s = "2+30*4+(5+6)*7";
String[] tokens = s.split("(?<=[+\\-*/()])|(?=[+\\-*/()])");
for (String token : tokens)
System.out.println(token);

输出:

2
+
30
*
4
+
(
5
+
6
)
*
7

关于Java 正则表达式模式和匹配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20483349/

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