【发布时间】:2013-12-09 23:56:13
【问题描述】:
我尝试使用 Mathcer 解析此字符串:“2+30*4+(5+6)*7”
使用此模式:“\d*|[()+*-]”
由于某种原因,Matcher 正确地拆分了字符串,但是当遍历拆分后的字符串时,它并没有正确地分割它们,除了数字之外的任何内容都留下了空字符串:
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" 时,它可以正常工作...
【问题讨论】: