嘿,我一直在試圖弄清楚爲什麼這個正則表達式不正確匹配。 模式匹配數字/運算符
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