java 從字串中提取省、市、區、鎮、鄉等區域名稱(包含少數民族地區)
阿新 • • 發佈:2018-12-15
近期寫的一個專案,需要從IOS和Android傳來的一個字串提取省、市、區等區域名稱,於是就整理了一個工具類,程式碼如下:
import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @author Zhang * java正則表示式通過java.util.regex包下的Pattern類與Matcher類實現(建議在閱讀本文時,開啟java * API文件,當介紹到哪個方法時,檢視java API中的方法說明,效果會更佳). * Pattern類用於建立一個正則表示式,也可以說建立一個匹配模式,它的構造方法是私有的,不可以直接建立,但可以通過Pattern.complie(String * regex)簡單工廠方法建立一個正則表示式, */ public class Test { /** * 解析地址 * @param address * @return */ public static List<Map<String,String>> addressResolution(String address){ /* * java.util.regex是一個用正則表示式所訂製的模式來對字串進行匹配工作的類庫包。它包括兩個類:Pattern和Matcher Pattern * 一個Pattern是一個正則表示式經編譯後的表現模式。 Matcher * 一個Matcher物件是一個狀態機器,它依據Pattern物件做為匹配模式對字串展開匹配檢查。 * 首先一個Pattern例項訂製了一個所用語法與PERL的類似的正則表示式經編譯後的模式,然後一個Matcher例項在這個給定的Pattern例項的模式控制下進行字串的匹配工作。 */ String regex="(?<province>[^省]+自治區|.*?省|.*?行政區|.*?市)(?<city>[^市]+自治州|.*?地區|.*?行政單位|.+盟|市轄區|.*?市|.*?縣)(?<county>[^縣]+縣|.+區|.+市|.+旗|.+海域|.+島)?(?<town>[^區]+區|.+鎮)?(?<village>.*)"; Matcher m=Pattern.compile(regex).matcher(address); String province=null,city=null,county=null,town=null,village=null; List<Map<String,String>> table=new ArrayList<Map<String,String>>(); Map<String,String> row=null; while(m.find()){ row=new LinkedHashMap<String,String>(); province=m.group("province"); row.put("province", province==null?"":province.trim()); city=m.group("city"); row.put("city", city==null?"":city.trim()); county=m.group("county"); row.put("county", county==null?"":county.trim()); town=m.group("town"); row.put("town", town==null?"":town.trim()); village=m.group("village"); row.put("village", village==null?"":village.trim()); table.add(row); } return table; } public static void main(String[] args) { List<Map<String,String>> table = addressResolution("浙江省杭州市拱墅區湖墅南路湖墅新村4幢"); System.out.println(table); System.out.println(table.get(0).get("province")); System.out.println(table.get(0).get("city")); System.out.println(table.get(0).get("county")); System.out.println(table.get(0).get("town")); System.out.println(table.get(0).get("village")); } }
結果如下: