字符串解析省市区,工具类,复制粘贴可直接使用
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;
}
}