嘿,我一直在试图弄清楚为什么这个正则表达式不正确匹配。 模式匹配数字/运算符
List l_operators = Arrays.asList(Pattern.compile(" (\\d+)").split(rtString.trim()));
输入字符串是
"12+22+3"
输出我得到的是-- [,+,+]
有比赛在这不应该出现在列表的开始?我真的看不到它,我可以用一些见解。谢谢。
嘿,我一直在试图弄清楚为什么这个正则表达式不正确匹配。 模式匹配数字/运算符
List l_operators = Arrays.asList(Pattern.compile(" (\\d+)").split(rtString.trim()));
输入字符串是
"12+22+3"
输出我得到的是-- [,+,+]
有比赛在这不应该出现在列表的开始?我真的看不到它,我可以用一些见解。谢谢。
那么,从技术上讲,第一个分隔符(第一个数字序列)前面有一个空字符串。如果你有,说一行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()));
// ...
}
然而理想情况下,你应该使用这些类型的字符串的解析器。例如,你不能用正则表达式处理表达式中的括号。
这就是Java中分割的行为。你只需要把它(并处理它)或使用其他库来拆分字符串。我个人尽量避免从Java中分裂出来。
一个替代方法的例子是从Google Guava中查看Splitter。
尝试Guava的Splitter。
Splitter.onPattern("\\d+").omitEmptyStrings().split(rtString)
ofcourse !! ..使完美的感觉..谢谢.. – 2010-10-25 09:48:31