前言
最近工作中遇到一个需求,各快递公司的官网在线寄件中都有地址识别的组件,输入姓名,电话,地址识别省市区加详细地址的方式,网上收集的解决方案是通过正则表达式匹配出省市区关键字,但是这种方式对于特殊的地址不够灵活,且兼容性不高.现在需要研发一个高可用的识别接口,该如何做到?
方案
首先百度找了一下灵感,网上现有的方式是通过正则表达式匹配省市区关键字,如下:
/**
* 解析地址
* @param address
* @return
*/
public static List<Map<String,String>> addressResolution(String address){
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")