二手车网站设计,建网站 云主机,成都网站建设小公司排名,外贸 网站 建设 高端正则表达式#xff0c;匹配全国五级地址工具类#xff0c;可以直接放在项目中使用~ 1级#xff1a;国 #xff08;可忽略不填#xff09; 2级#xff1a;**省、**自治区、**直辖市、**特别行政区、#xff08;四个直辖市可忽略不填#xff09; 3级#xff1a;**市、**…正则表达式匹配全国五级地址工具类可以直接放在项目中使用~ 1级国 可忽略不填 2级**省、**自治区、**直辖市、**特别行政区、四个直辖市可忽略不填 3级**市、**地区、**自治州、**盟、**自治区、**县、**自治县、 4级**区、**市、**县、**乡、**民族乡、**镇、**自治县、 5级**县、**街道、**镇、**团、**岸、**场、**处、**委员会、**区、市、乡、 详情地址如路小区单元室
拿到手就可以直接使用啦 如下是运行结果 import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import java.util.regex.Matcher;
import java.util.regex.Pattern;/**1级国 可忽略不填2级**省、**自治区、**直辖市、**特别行政区、四个直辖市可忽略不填3级**市、**地区、**自治州、**盟、**自治区、**县、**自治县、4级**区、**市、**县、**乡、**民族乡、**镇、**自治县、5级**县、**街道、**镇、**团、**岸、**场、**处、**委员会、**区、**市、**乡、详情地址如**路**小区**单元**室** date 2024-10-12 17:30:00* author wangzhen*/
public class RegionCalcUtil {// 匹配国家: 中国 一级地址private static final String nation 中国;// 正则表达式: 匹配城市 二级地址private static final String provinceRegex (?province[^省]省|[^自治区]自治区|[^特别行政区]特别行政区|[^直辖市]直辖市|北京|上海|天津|重庆);// 正则表达式: 匹配区市县 三级地址private static final String cityRegex (?city[^市]市|[^地区]地区|[^自治州]自治州|[^盟]盟|[^自治区]自治区|[^县]县);// 正则表达式: 匹配街道镇等 四级地址private static final String areaRegex (?area[^县]县|[^区]区|[^市]市|[^乡]乡|[^镇]镇);// 正则表达式: 匹配街道镇团等 五级地址private static final String streetRegex (?street[^县]县|[^街道]街道|[^镇]镇|[^团]团|[^岸]岸|[^场]场|[^处]处|[^委员会]委员会|[^区]区|[^市]市|[^乡]乡);// 正则表达式: 匹配国家private static final String detailAddress (?detail.*);// 各级地址分隔符如想在各级地址中间带上 - ,就设置为该值private static final String separate ;// 该属性是线程安全的private static final Pattern pattern;static {// 初始化patternpattern Pattern.compile(provinceRegex separate cityRegex separate areaRegex separate streetRegex separate detailAddress);}public static void main(String[] args) {
// 山东省-威海市-威海火炬高技术产业开发区-怡园街道威海高区文鑫家园2号楼001室
// 上海市-长宁区-程家桥街道虹桥路2279号温莎花园00幢
// 浙江省-金华市-义乌市-廿三里街道街道龙潭路1号33楼
// 山东省-菏泽市-牡丹区-东城街道青年南路569韵泽园小区1号楼一单元
// 江西省-南昌市-南昌县-东新乡象湖新城金沙大道绿地山庄188栋String address 重庆 重庆市 合川区 钓鱼城街道盘龙路环球家园1栋一单元4_3;;System.out.println(addressResolution(address));}public static Region addressResolution(String address) {address prevProcess(address);// 编译正则表达式注意这里的顺序可能需要调整以避免冲突Matcher matcher pattern.matcher(address);if (matcher.find()) {// 用于有序存放四级地址Region region new Region();region.setNation(nation);region.setProvince(removeStr(matcher.group(province)));region.setCity(removeStr(matcher.group(city)));region.setArea(removeStr(matcher.group(area)));region.setStreet(removeStr(matcher.group(street)));region.setDetail(removeStr(matcher.group(detail)));return region;}return null;}public static LevelRegion addressResolutionToLevel(String address){Region region addressResolution(address);if(region null){return null;}LevelRegion levelRegion new LevelRegion();levelRegion.setFirstRegion(region.getNation());levelRegion.setSecondRegion(region.getProvince());levelRegion.setThirdRegion(region.getCity());levelRegion.setFourthRegion(region.getArea());levelRegion.setFifthRegion(region.getStreet());levelRegion.setDetail(region.getDetail());return levelRegion;}private static String removeStr(String str){if(str null){return null;}return str.trim().replaceAll(-, ).replaceAll(,, ).replaceAll(\\., ).replace( , );}private static String prevProcess(String address){// 不填四个直辖市给补充上if(address.startsWith(上海市)){address 上海 address;}else if(address.startsWith(北京市)){address 北京 address;}else if(address.startsWith(天津市)){address 天津 address;}else if(address.startsWith(重庆市)){address 重庆 address;}// 将国家去掉if(address.startsWith(nation)){address address.substring(nation.length());}return address;}GetterSetterToStringpublic static class Region{/*** 一级地址中国*/private String nation;/*** 二级地址省、*/private String province;/*** 三级地址值区市县*/private String city;/*** 四级地址镇等*/private String area;/*** 五级地址街道等*/private String street;/*** 后续地址详情*/private String detail;}GetterSetterToStringpublic static class LevelRegion{/*** 一级地址中国*/private String firstRegion;/*** 二级地址省、*/private String secondRegion;/*** 三级地址值区市县*/private String thirdRegion;/*** 四级地址镇等*/private String fourthRegion;/*** 五级地址街道等*/private String fifthRegion;/*** 后续地址详情*/private String detail;}
}