我想通過將所有非字母表設置爲分隔符來拆分字符串。java與正則表達式拆分字符串
String[] word_list = line.split("[^a-zA-Z]");
但具有下列輸入
11:11你好世界
WORD_LIST包含前 「你好」 和 「世界」
敬請許多空字符串告訴我爲什麼。謝謝。
我想通過將所有非字母表設置爲分隔符來拆分字符串。java與正則表達式拆分字符串
String[] word_list = line.split("[^a-zA-Z]");
但具有下列輸入
11:11你好世界
WORD_LIST包含前 「你好」 和 「世界」
敬請許多空字符串告訴我爲什麼。謝謝。
因爲您的正則表達式匹配每個單獨的非alpha字符。這就像分離
",,,,,,Hello,World"
上的逗號。
你會希望這樣的非字母字符的整個序列在一次如火柴的表達式:
line.split("[^a-zA-Z][^a-zA-Z]*")
我仍然認爲你會得到一個領先的空字符串與你的例子,因爲它會像分離",Hello,World"
如果逗號是你的分隔符。
與[[a-zA-Z] +'相同]。 – blackcompe 2012-03-17 06:12:14
感謝blackcompe。我認爲它會,但不知道,因爲我已經使用了一些正則表達式實現支持+和其他人不支持。不確定Java的String.split()。 – rayd09 2012-03-17 06:17:32
最後,我首先用空字符串替換標題非字母字符,然後用此正則表達式調用split() – Bear 2012-03-17 06:21:29
下面會做什麼?
String[] word_list = line.replaceAll("[^a-zA-Z ]","").replaceAll(" +", " ").trim().split("[^a-zA-Z]");
我在這裏做的是在拆分之前刪除所有非字母字符,然後用單個空格替換多個空格。
這是你的字符串,其中每個字符^
顯示[^a-zA-Z]
匹配:
11:11 Hello World
^^^^^^ ^
的split
方法找到這些比賽,基本上返回^
字符之間的所有子。由於在有用數據之前有6個匹配項,因此在得到字符串"Hello"
之前,最終會有5個空子串。
爲了防止出現這種情況,您可以手動過濾結果以忽略任何空字符串。
我喜歡你的解釋,因爲它非常清楚。 但我只能給一個勾號,對不起。 – Bear 2012-03-17 06:27:29
您是否期待以'11:11 Hello World'作爲輸入結果? – MJM 2012-03-17 06:13:26