1. 程式人生 > >用正則表示式切割詳細地址中的省、市、區(例如:address=陝西省延安市寶塔區寶塔山街道寶塔山景區,切割之後為province=陝西省, city=延安市, county=寶塔區寶塔山街道寶塔山景)

用正則表示式切割詳細地址中的省、市、區(例如:address=陝西省延安市寶塔區寶塔山街道寶塔山景區,切割之後為province=陝西省, city=延安市, county=寶塔區寶塔山街道寶塔山景)

將詳細地址切割為省市區工具類(還要切割到鎮、村莊參考博文:https://blog.csdn.net/superSubfn/article/details/80290491

package com.camelot.attendance.util;

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;

/**
 * <p>Description:[切割詳細地址到省市區工具類,例如:將陝西省西安市高新區邁科大廈切割為:province=陝西省,city=西安市,region=x高新區]</p>
 * Created on 2019年01月11日 14:54
 *
 * @author daihu
 * @version 1.0
 */
public class AddressResolutionUtil {
    public static Map<String, String> addressResolution(String address) {
        //符合中國地區命名的正則表示式
        String regex = "(?<province>[^省]+自治區|.*?省|.*?行政區|.*?市)(?<city>[^市]+自治州|.*?地區|.*?行政單位|.+盟|市轄區|.*?市|.*?縣)(?<region>[^縣]+縣|.+區|.+市|.+旗|.+海域|.+島)?";
        Matcher matcher = Pattern.compile(regex).matcher(address);
        //省、市、區
        String province = null, city = null, region = null;
        Map<String, String> splitMap = null;
        while (matcher.find()) {
            splitMap = new LinkedHashMap<String, String>();
            province = matcher.group("province");
            splitMap.put("province", province == null ? "" : province.trim());
            city = matcher.group("city");
            splitMap.put("city", city == null ? "" : city.trim());
            region = matcher.group("region");
            splitMap.put("region", region == null ? "" : region.trim());

        }
        return splitMap;
    }

    public static void main(String[] args) {
        System.out.println(addressResolution("陝西省延安市寶塔區麥克大廈"));
    }

}

執行結果: