字符串解析省市区

字符串解析省市区,工具类,复制粘贴可直接使用

import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author zqh
 */
public class AddressResolutionUtil {
    private static String regex = "(?<province>[^省]+自治区|.*?省|.*?行政区|.*?市)(?<city>[^市]+自治州|.*?地区|.*?行政单位|.+盟|市辖区|.*?市|.*?县|[^区]+区|.*?仔岛|.*?环岛)(?<county>[^区]+区|[^县]+县|[^市]+市|.+旗|.+海域|.+岛|[^镇]+镇|[^乡]+乡)?(?<town>[^区]+区|.+镇)?(?<village>.*)";

    static Map<String, Map<String, String>> cannotBeResolvedMap = new HashMap<>(64);

    static {
        putCannotBeResolvedMap("台湾省云林县斗六市", "台湾省", "云林县", "斗六市");
        putCannotBeResolvedMap("台湾省花莲县花莲市", "台湾省", "花莲县", "花莲市");
        putCannotBeResolvedMap("台湾省宜兰县宜兰市", "台湾省", "宜兰县", "宜兰市");
        putCannotBeResolvedMap("台湾省台东县绿岛乡", "台湾省", "台东县", "绿岛乡");
        putCannotBeResolvedMap("台湾省苗栗县苗栗市", "台湾省", "苗栗县", "苗栗市");
        putCannotBeResolvedMap("台湾省桃园县芦竹市", "台湾省", "桃园县", "芦竹市");
        putCannotBeResolvedMap("台湾省桃园县平镇市", "台湾省", "桃园县", "平镇市");
        putCannotBeResolvedMap("台湾省澎湖县马公市", "台湾省", "澎湖县", "马公市");
        putCannotBeResolvedMap("台湾省台东县台东市", "台湾省", "台东县", "台东市");
        putCannotBeResolvedMap("台湾省南投县南投市", "台湾省", "南投县", "南投市");
        putCannotBeResolvedMap("台湾省屏东县屏东市", "台湾省", "屏东县", "屏东市");
        putCannotBeResolvedMap("台湾省桃园县杨梅市", "台湾省", "桃园县", "杨梅市");
        putCannotBeResolvedMap("台湾省嘉义县太保市", "台湾省", "嘉义县", "太保市");
        putCannotBeResolvedMap("台湾省新竹县竹北市", "台湾省", "新竹县", "竹北市");
        putCannotBeResolvedMap("台湾省桃园县八德市", "台湾省", "桃园县", "八德市");
        putCannotBeResolvedMap("台湾省桃园县中坜市", "台湾省", "桃园县", "中坜市");
        putCannotBeResolvedMap("台湾省桃园县桃园市", "台湾省", "桃园县", "桃园市");
        putCannotBeResolvedMap("台湾省彰化县彰化市", "台湾省", "彰化县", "彰化市");
        putCannotBeResolvedMap("台湾省嘉义县朴子市", "台湾省", "嘉义县", "朴子市");

        putCannotBeResolvedMap("河南省新乡市辉县市", "河南省", "新乡市", "辉县市");
        putCannotBeResolvedMap("新疆维吾尔自治区克孜勒苏柯尔克孜乌恰县", "新疆维吾尔自治区", "克孜勒苏柯尔克孜", "乌恰县");
        putCannotBeResolvedMap("新疆维吾尔自治区克孜勒苏柯尔克孜阿克陶县", "新疆维吾尔自治区", "克孜勒苏柯尔克孜", "阿克陶县");
        putCannotBeResolvedMap("新疆维吾尔自治区克孜勒苏柯尔克孜阿合奇县", "新疆维吾尔自治区", "克孜勒苏柯尔克孜", "阿合奇县");
        putCannotBeResolvedMap("新疆维吾尔自治区克孜勒苏柯尔克孜阿图什市", "新疆维吾尔自治区", "克孜勒苏柯尔克孜", "阿图什市");
        putCannotBeResolvedMap("湖南省常德市津市市", "湖南省", "常德市", "津市市");
        putCannotBeResolvedMap("广东省中山市古镇镇", "广东省", "中山市", "古镇镇");
        putCannotBeResolvedMap("云南省普洱市西盟佤族自治县", "云南省", "普洱市", "西盟佤族自治县");
        putCannotBeResolvedMap("浙江省舟山群岛新区岱山岛西南部", "浙江省", "舟山群岛新区", "岱山岛西南部");
        putCannotBeResolvedMap("浙江省舟山群岛新区舟山本岛西北部", "浙江省", "舟山群岛新区", "舟山本岛西北部");
        putCannotBeResolvedMap("陕西省西咸新区泾河新城", "陕西省", "西咸新区", "泾河新城");
        putCannotBeResolvedMap("陕西省西咸新区沣东新城", "陕西省", "西咸新区", "沣东新城");
        putCannotBeResolvedMap("陕西省西咸新区沣西新城", "陕西省", "西咸新区", "沣西新城");
        putCannotBeResolvedMap("陕西省西咸新区秦汉新城", "陕西省", "西咸新区", "秦汉新城");
        putCannotBeResolvedMap("陕西省西咸新区空港新城", "陕西省", "西咸新区", "空港新城");
    }


    static void putCannotBeResolvedMap(String address, String province, String city, String county) {
        Map<String, String> map = new HashMap<>(4);
        map.put("province", province);
        map.put("city", city);
        map.put("county", county);
        cannotBeResolvedMap.put(address, map);
    }

    /**
     * 解析地址
     */
    public static Map<String, String> addressResolution(String address) {
        Optional<String> first = cannotBeResolvedMap.keySet().stream().filter(cannotBeResolvedAddress -> address.startsWith(cannotBeResolvedAddress)).findFirst();
        if (first.isPresent()) {
            return cannotBeResolvedMap.get(first.get());
        }
        Matcher m = Pattern.compile(regex).matcher(address);
        List<Map<String, String>> table = new ArrayList<Map<String, String>>();
        Map<String, String> row = null;
        while (m.find()) {
            row = new LinkedHashMap<>();
            row.put("province", Optional.ofNullable(m.group("province")).orElse("").replaceAll(" ", ""));
            row.put("city", Optional.ofNullable(m.group("city")).orElse("").replaceAll(" ", ""));
            row.put("county", Optional.ofNullable(m.group("county")).orElse("").replaceAll(" ", ""));
            row.put("town", Optional.ofNullable(m.group("town")).orElse("").replaceAll(" ", ""));
            row.put("village", Optional.ofNullable(m.group("village")).orElse("").replaceAll(" ", ""));
            table.add(row);
        }
        return row;
    }
}

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值