2010-10-25 105 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)