2010-08-23 127 views
1

我有一個字符串,如的Java字符串分割問題

397 Walker Road         Wayne, PA 19087 

我需要從中提取的地址信息(街道地址,城市,州,郵編)。問題是,數據庫中的空白量不一致。

我已經在逗號分隔了字符串,並提取了狀態和zip。但是,如何讓這座城市遠離這個城市,特別是因爲白色空間不一致,我們感到茫然。

回答

3

您可以使用正則表達式像[\s]{2,}這意味着找到2米或多個連續的空格,刪除多餘的空格。這個正則表達式不會匹配單個空格。然後,您可以用空白替換匹配的空格,然後提取城市(提取城市是不同的問題)。希望這可以幫助。

+0

是的,這是我需要的 – Pete 2010-08-23 16:19:01

0

問題是,數據庫中的空白量不一致。
如果不同的數據字段之間至少有兩個空格,則應該這樣工作:s.split("\\s\\s+")。每個兩個或多個空白字符的序列在這裏將被視爲分隔符。
但如果數據可以是任何格式,並有完全沒有一致性,沒有算法可以幫助你:)

3

在分割字符串之前使用trim()方法修剪空格。然後使用正則表達式分割字符串,查找Charecter之後的數字。

+1

只是想知道..爲什麼我們需要尋找字符後的數字?如果用戶要填寫地址,那麼他/她也可能以錯誤的順序給出地址(錯誤地)。 – Shekhar 2010-08-23 04:50:45

0

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] 

此正則表達式查找逗號(,兩側可選空白),或至少兩個空格字符。

0

我覺得皮特的意思是,

397獲嘉道韋恩,PA 19087

有 「韋恩」 作爲城市

397獲嘉道鹽湖城,PA 19087

以「鹽湖城」爲城市

假設逗號之前的整個部分的寬度是固定的,使用Shekhar的答案(分別爲兩個或多個空格的序列的左右兩側)可能會得到相當好的結果,使用[\ s] {2,}

或者,您可能必須在常見的「街道」結尾處進行匹配,例如道路,rd,街道,st [hmm,st。 =聖,這可能是一個問題],大道,大道等

對不起皮特,我想我們需要知道更多關於你的數據集看起來像什麼,你還有什麼其他數據可用(僅限美國?城市?等)

Roger

0

在所有情況下都沒有辦法做到這一點。你可以寫一個算法,假設街道部分總是以類似Road,Street,Lane等結尾。