用正則表示式切割詳細地址中的省、市、區(例如:address=陝西省延安市寶塔區寶塔山街道寶塔山景區,切割之後為province=陝西省, city=延安市, county=寶塔區寶塔山街道寶塔山景)
阿新 • • 發佈:2019-01-12
將詳細地址切割為省市區工具類(還要切割到鎮、村莊參考博文: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("陝西省延安市寶塔區麥克大廈")); } }
執行結果: