我有一個字符串,如的Java字符串分割問題
397 Walker Road Wayne, PA 19087
我需要從中提取的地址信息(街道地址,城市,州,郵編)。問題是,數據庫中的空白量不一致。
我已經在逗號分隔了字符串,並提取了狀態和zip。但是,如何讓這座城市遠離這個城市,特別是因爲白色空間不一致,我們感到茫然。
我有一個字符串,如的Java字符串分割問題
397 Walker Road Wayne, PA 19087
我需要從中提取的地址信息(街道地址,城市,州,郵編)。問題是,數據庫中的空白量不一致。
我已經在逗號分隔了字符串,並提取了狀態和zip。但是,如何讓這座城市遠離這個城市,特別是因爲白色空間不一致,我們感到茫然。
您可以使用正則表達式像[\s]{2,}
這意味着找到2米或多個連續的空格,刪除多餘的空格。這個正則表達式不會匹配單個空格。然後,您可以用空白替換匹配的空格,然後提取城市(提取城市是不同的問題)。希望這可以幫助。
問題是,數據庫中的空白量不一致。
如果不同的數據字段之間至少有兩個空格,則應該這樣工作:s.split("\\s\\s+")
。每個兩個或多個空白字符的序列在這裏將被視爲分隔符。
但如果數據可以是任何格式,並有完全沒有一致性,沒有算法可以幫助你:)
在分割字符串之前使用trim()
方法修剪空格。然後使用正則表達式分割字符串,查找Charecter之後的數字。
只是想知道..爲什麼我們需要尋找字符後的數字?如果用戶要填寫地址,那麼他/她也可能以錯誤的順序給出地址(錯誤地)。 – Shekhar 2010-08-23 04:50:45
OK,這裏是我的版本:
final String str = "397 Walker Road Wayne, PA 19087";
final String[] tokens = str.split("(\\s*,\\s*|\\s{2,})");
System.out.println(Arrays.toString(tokens));
輸出:
[397 Walker Road, Wayne, PA, 19087]
此正則表達式查找逗號(,兩側可選空白),或至少兩個空格字符。
我覺得皮特的意思是,
397獲嘉道韋恩,PA 19087
有 「韋恩」 作爲城市
但
397獲嘉道鹽湖城,PA 19087
以「鹽湖城」爲城市
假設逗號之前的整個部分的寬度是固定的,使用Shekhar的答案(分別爲兩個或多個空格的序列的左右兩側)可能會得到相當好的結果,使用[\ s] {2,}
或者,您可能必須在常見的「街道」結尾處進行匹配,例如道路,rd,街道,st [hmm,st。 =聖,這可能是一個問題],大道,大道等
對不起皮特,我想我們需要知道更多關於你的數據集看起來像什麼,你還有什麼其他數據可用(僅限美國?城市?等)
Roger
在所有情況下都沒有辦法做到這一點。你可以寫一個算法,假設街道部分總是以類似Road,Street,Lane等結尾。
是的,這是我需要的 – Pete 2010-08-23 16:19:01