2010-10-25 63 views
1

嘿,我一直在试图弄清楚为什么这个正则表达式不正确匹配。 模式匹配数字/运算符


    List l_operators = Arrays.asList(Pattern.compile(" (\\d+)").split(rtString.trim())); 
输入字符串是 "12+22+3"

输出我得到的是-- [,+,+]

有比赛在这不应该出现在列表的开始?我真的看不到它,我可以用一些见解。谢谢。

回答

2

那么,从技术上讲,第一个分隔符(第一个数字序列)前面有一个空字符串。如果你有,说一行CSV,如abc,def,ghi和另一个,jkl,mno你很显然想知道第二个字符串中的第一个值是空字符串。 因此在大多数情况下,行为

对于您的特定情况,您需要手动处理它,或者以某种方式优化正则表达式。像这样的例子:

Pattern p = Pattern.compile("\\d+"); 
Matcher m = p.matcher(rtString); 
if (m.find()) { 
    List l_operators = Arrays.asList(p.split(rtString.substring(m.end()).trim())); 
    // ... 
} 

然而理想情况下,你应该使用这些类型的字符串的解析器。例如,你不能用正则表达式处理表达式中的括号。

+0

ofcourse !! ..使完美的感觉..谢谢.. – 2010-10-25 09:48:31

1

这就是Java中分割的行为。你只需要把它(并处理它)或使用其他库来拆分字符串。我个人尽量避免从Java中分裂出来。

一个替代方法的例子是从Google Guava中查看Splitter

0

尝试Guava的Splitter

Splitter.onPattern("\\d+").omitEmptyStrings().split(rtString)