1. 程式人生 > >java 從字串中提取省、市、區、鎮、鄉等區域名稱(包含少數民族地區)

java 從字串中提取省、市、區、鎮、鄉等區域名稱(包含少數民族地區)

近期寫的一個專案,需要從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"));
	}

}

結果如下: