省市区地址解析

需求

把地址串进行格式化处理
国家直辖市:市-市-区-详细地址;示例:北京市-北京市-朝阳区-三里屯优衣库
省份县级直辖市:省-市-市-详细地址;示例:河南省-济源市-济源市-黄河小浪底风景区

目标地址示例

System.out.println(addressResolution("湖北省武汉市洪山区"));
System.out.println(addressResolution("湖北省恩施土家族苗族自治州恩施市"));
System.out.println(addressResolution("北京市市辖区朝阳区"));
System.out.println(addressResolution("内蒙古自治区兴安盟科尔沁右翼前旗"));
System.out.println(addressResolution("西藏自治区日喀则地区日喀则市"));
System.out.println(addressResolution("海南省省直辖县级行政单位中沙群岛的岛礁及其海域"));
System.out.println(addressResolution("江苏省徐州市丰县中阳里街道美丰街137号中阳商城2区"));
System.out.println(addressResolution("北京市北京市朝阳区三里屯优衣库"));
System.out.println(addressResolution("河南省济源市济源市黄河小浪底风景区"));
System.out.println(addressResolution("河南省洛阳市西工区红山街道洛阳五洲跨境电商园区中国一拖集团有限公司(汉宫路)"));
System.out.println(addressResolution("河南省洛阳市涧西区青岛路(涧西区工业园区)"));
System.out.println(addressResolution("山西省临汾市山西省临汾市"));
System.out.println(addressResolution("河南省郑州市新郑市航空港区创业园区"));

解析后地址示例

湖北省-武汉市-洪山区
湖北省-恩施土家族苗族自治州-恩施市
北京市-市辖区-朝阳区
内蒙古自治区-兴安盟-科尔沁右翼前旗
西藏自治区-日喀则地区-日喀则市
海南省-省直辖县级行政单位-中沙群岛的岛礁及其海域
江苏省-徐州市-丰县-中阳里街道美丰街137号中阳商城2区
北京市-北京市-朝阳区-三里屯优衣库
河南省-济源市-济源市-黄河小浪底风景区
河南省-洛阳市-西工区-红山街道洛阳五洲跨境电商园区中国一拖集团有限公司(汉宫路)
河南省-洛阳市-涧西区-青岛路(涧西区工业园区)
山西省-临汾市-山西省临汾市
河南省-郑州市-新郑市-航空港区创业园区

代码

/**
     * 解析地址
     *
     * 国家直辖市:市-市-区-详细地址;示例:北京市-北京市-朝阳区-三里屯优衣库
     * 省份县级直辖市:省-市-市-详细地址;示例:河南省-济源市-济源市-黄河小浪底风景区
     *
     * @param address
     * @return
     */
    public static String addressResolution(String address) {
        String regex = "(?[^省]+自治区|.*?省|.*?行政区|.*?市)?(?[^市]+自治州|.*?地区|.*?行政单位|.+盟|市辖区|.*?市|.*?县)?(?[^(区|市|县|旗|海域|岛)]+区|.*?市|.*?县|.*?旗|.*?海域|.*?岛)?(?.*)";

        Matcher m = Pattern.compile(regex).matcher(address);
        String province=null,city=null,county=null,town=null,village=null;
        StringBuilder sb = new StringBuilder();
        while(m.find()){
            province = m.group("province");
            buildAddress(province, sb);
            city = m.group("city");
            buildAddress(city, sb);
            county=m.group("county");
            buildAddress(county, sb);
            village=m.group("village");
            buildAddress(village, sb);
        }
        if (sb.toString().endsWith("-")) {
            sb.deleteCharAt(sb.length() - 1);
        }
        return sb.toString();
    }

    /**
     * 构建地址信息
     *
     * @param province
     * @param sb
     */
    private static void buildAddress(String province, StringBuilder sb) {
        if (EmptyUtil.isNotNull(province)) {
            sb.append(province.trim()).append("-");
        }
    }

你可能感兴趣的:(省市区地址解析)