工具类①:

AddressAnalysisUtil.java

import org.apache.commons.lang3.StringUtils;
import java.util.Arrays;public class AddressAnalysisUtil {public static void main(String[] args) {String address= AddressAnalysisUtil.covertOnlyDetailAddress("重庆市渝北区龙山大道xx号x幢2xxx");System.out.println(address);String pcdStr= AddressAnalysisUtil.covertFullPCD("内蒙古自治区兴安盟科尔沁右翼前旗");System.out.println(pcdStr);String[] addressArray = AddressAnalysisUtil.convertDetailAddressToPCD("山东省临沂市兰山区李官镇小李官村XXXXX号");System.out.println(Arrays.asList(addressArray).toString());}/*** 只获取出详细地址** @param fullAddress* @return*/public static String covertOnlyDetailAddress(String fullAddress) {String[] addressArrays = convertDetailAddressToPCD(fullAddress);return addressArrays[addressArrays.length - 1];}/*** 只获取出省市区的拼接** @param fullAddress* @return*/public static String covertFullPCD(String fullAddress) {String[] addressArrays = convertDetailAddressToPCD(fullAddress);StringBuffer pdcStrBuffer=new StringBuffer();for (int i = 0; i < addressArrays.length-1; i++) {if (StringUtils.isNotEmpty(addressArrays[i])){pdcStrBuffer.append(addressArrays[i]);}}return pdcStrBuffer.toString();}/*** 处理详细地址拆分省 市 区 地址的转换关系** @param detailAddress* @return*/public static String[] convertDetailAddressToPCD(String detailAddress) {String[] r = new String[4];try {String tempStr = detailAddress;String province = null;int provinceIdx = processProvince(tempStr);if (provinceIdx > -1) {province = tempStr.substring(0, provinceIdx + 1);tempStr = tempStr.substring(provinceIdx + 1);}String city = null;int cityIdx = processCity(tempStr);if (cityIdx > -1) {city = tempStr.substring(0, cityIdx + 1);tempStr = tempStr.substring(cityIdx + 1);}String county = null;int countyIdx = processCounty(tempStr);if (countyIdx > -1) {county = tempStr.substring(0, countyIdx + 1);tempStr = tempStr.substring(countyIdx + 1);}String street = tempStr;r[0] = province;r[1] = city;r[2] = county;r[3] = street;} catch (Exception e) {// 报错就直接返回r 为空即可。无法正常转义}return r;}// (?<province>[^省]+自治区|.*?省|.*?行政区|.*?市)private static int processProvince(String s) {int[] idxs = new int[3];int provinceIdx = -1;if ((provinceIdx = s.indexOf("省")) > -1)idxs[0] = provinceIdx;provinceIdx = -1;if ((provinceIdx = s.indexOf("市")) > -1)idxs[1] = provinceIdx;provinceIdx = -1;if ((provinceIdx = s.indexOf("区")) > -1)idxs[2] = provinceIdx;Arrays.sort(idxs);for (int i = 0; i < idxs.length; i++) {int j = idxs[i];if (j > 0) {return j;}}return provinceIdx;}// (?<city>[^市]+自治州|.*?地区|.*?行政单位|.+盟|市辖区|.*?市|.*?县)private static int processCity(String s) {int[] idxs = new int[7];int cityIdx = -1;if ((cityIdx = s.indexOf("县")) > -1)idxs[0] = cityIdx;cityIdx = -1;if ((cityIdx = s.indexOf("自治州")) > -1)idxs[1] = cityIdx + 2;cityIdx = -1;if ((cityIdx = s.indexOf("市辖区")) > -1)idxs[2] = cityIdx + 2;cityIdx = -1;if ((cityIdx = s.indexOf("市")) > -1)idxs[3] = cityIdx;cityIdx = -1;if ((cityIdx = s.indexOf("区")) > -1)idxs[4] = cityIdx;cityIdx = -1;if ((cityIdx = s.indexOf("地区")) > -1)idxs[5] = cityIdx + 1;cityIdx = -1;if ((cityIdx = s.indexOf("盟")) > -1)idxs[6] = cityIdx;Arrays.sort(idxs);for (int i = 0; i < idxs.length; i++) {int j = idxs[i];if (j > 0) {return j;}}return cityIdx;}// (?<county>[^县]+县|.+区|.+市|.+旗|.+海域|.+岛)private static int processCounty(String s) {int[] idxs = new int[6];int countyIdx = -1;if ((countyIdx = s.indexOf("县")) > -1)idxs[0] = countyIdx;countyIdx = -1;if ((countyIdx = s.indexOf("旗")) > -1)idxs[1] = countyIdx;countyIdx = -1;if ((countyIdx = s.indexOf("海域")) > -1)idxs[2] = countyIdx + 1;countyIdx = -1;if ((countyIdx = s.indexOf("市")) > -1)idxs[3] = countyIdx;countyIdx = -1;if ((countyIdx = s.indexOf("区")) > -1)idxs[4] = countyIdx;countyIdx = -1;if ((countyIdx = s.indexOf("岛")) > -1)idxs[5] = countyIdx;Arrays.sort(idxs);for (int i = 0; i < idxs.length; i++) {int j = idxs[i];if (j > 0) {return j;}}return countyIdx;}
}

效果:

工具类②:

AddressResolutionUtil.java

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;/*** 身份证地址提取省市区工具类*/
public class AddressResolutionUtil {/*** 根据身份证地址提取省市区工具类** @param address* @return*/public static List<Map<String, String>> addressResolution(String address) {String regex = "(?<province>[^省]+自治区|.*?省|.*?行政区|.*?市)(?<city>[^市]+自治州|.*?地区|.*?行政单位|.+盟|市辖区|.*?市|.*?县)(?<district>[^县]+县|.+区|.+市|.+旗|.+海域|.+岛)?(?<town>[^区]+区|.+镇)?(?<detail>.*)";Matcher m = Pattern.compile(regex).matcher(address);String province = null, city = null, district = null, town = null, detail = 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");row.put("city", city == null ? "" : city.trim());district = m.group("district");row.put("district", district == null ? "" : district.trim());town = m.group("town");row.put("town", town == null ? "" : town.trim());detail = m.group("detail");row.put("detail", detail == null ? "" : detail.trim());table.add(row);}return table;}public static void main(String[] args) {System.out.println(addressResolution("内蒙古自治区兴安盟科尔沁右翼前旗"));System.out.println(addressResolution("山东省临沂市兰山区李官镇小李官村XXXXX号"));}
}

效果:

Java 切割身份证地址,省市区 详细地址工具类相关推荐

  1. Java 根据身份证号计算周岁年龄 工具类

    package com.yao.utils; import java.util.Calendar; /**  * 根据身份证号计算周岁年龄  * @author yaodd  * @date 2021 ...

  2. 微信小程序选择地址填写详细地址定位地点

    感觉自己做了一个没有意义的东东,选择地址填写详细地址就可以找到那个地方. 如下图所示 首先需要一个写好的城市选择器,你可以自己写,也可以私信我h( ̄▽ ̄)~* 这是外部引入的组件 <area_p ...

  3. Java - HuTool 使用 EscapeUtil、XmlUtil等工具类(四)

    Java - HuTool 使用 EscapeUtil.XmlUtil等工具类(四) 本篇主要介绍 HuTool工具, 其是 java工具类,对于一些静态方法进行封装,虽然很小,但很全,里面拥有平时我 ...

  4. java将链接生成二维码工具类

    一.添加依赖 <!-- 生成二维码--><dependency><groupId>com.google.zxing</groupId><artif ...

  5. Java生成和解析二维码工具类(简单经典)

    Java生成和解析二维码工具类 开箱即用,简单不废话. pom.xml引入依赖 <!-- https://mvnrepository.com/artifact/com.google.zxing/ ...

  6. 记录一下:Java 汉字获取拼音或首字母工具类

    记录一下:Java 汉字获取拼音或首字母工具类 Maven依赖配置 Java代码 本文主要记录一下在Java中,如何将字符串中的中文转化为拼音,获取汉字串拼音首字母,获取汉字串拼音的工具类,以及相关的 ...

  7. Java教程:微信排序并加密工具类

    Java教程:微信排序并加密工具类 源码: import cn.bsit.commons.md5.MD5Utils;import java.util.Arrays; import java.util. ...

  8. JAVA之多sheet页表格生成工具类

    JAVA之多sheet页表格生成工具类 主要方法: import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.h ...

  9. ECSHOP打印订单显示省市区详细地址

    ECSHOP后台打印订单默认只有当收货人跟本网店在同一个省市的时候才会显示出来,非常不便.本人在网上也找了几个方法,效果也不好,下面提供给大家一个一个行之有效的方法 1.打开admin/order.p ...

最新文章

  1. 为什么异步Python比同步Python快?
  2. java Random.nextInt()方法
  3. 看完这篇文章之后,终于明白了编译到底怎么回事。
  4. go语言触发异常的场景
  5. 买走5355.5万张床垫的年轻人,实现“深睡自由”了吗?
  6. js实现右键单击打开自定义的菜单
  7. idea 中maven依赖报错3部曲
  8. windows系统bat批处理 windows 关机,重启,锁定,休眠,注销
  9. 【MySQL数据库】----保姆级MySQL驱动包安装+JDBC编程
  10. 基于暗通道先验的单幅图像去雾
  11. Android 84、gc、高德、百度、墨卡托地理坐标转换
  12. aid learning安装应用_极致安卓—Termux/Aid Learning安装宇宙最强VS Code
  13. odi12配置mysql_Oracle Data Integrator 12c 安装(ODI安装)
  14. 门户通专访爱思网创始人韩笑:SNS网站必然走向实用化!
  15. 基于EAST和Tesseract的文本检测与识别
  16. RTB论文梳理及精讲一
  17. pixfllow光流传感器数据获取及悬停程序编写
  18. vscode编辑器搜索小技巧
  19. c语言中的除号什么作用,c语言中除号用什么表示
  20. Android面试题(含答案)

热门文章

  1. android4.1 l36h,UI:全新Android 4.1果冻豆_索尼 L36h(Xperia Z/联通3G)_手机Android频道-中关村在线...
  2. 计算机视觉三大顶会文章下载方法
  3. dagger2无法生成daggerXXXcomponent原因分析
  4. 2020牛客寒假算法基础集训营1
  5. WaveMaker 快速开发工具
  6. 汉字转换成拼音的工具----pinyin4j
  7. 小学计算机老师每周周记,我的一周小学周记
  8. 起名~Java程序源码。
  9. 看完这个你会掌握:50W年薪的AI算法工程师必备的工具
  10. 砥砺深耕,笃行致远向未来——中国社科院与美国杜兰金融管理硕士项目