Java 收货地址解析实战:一条乱地址如何被拆成姓名、手机号和省市区(44 条真实样本验证)
Java 收货地址解析实战一条乱地址如何被拆成姓名、手机号和省市区44 条真实样本验证【免费下载链接】address-parseJava 版智能解析收货地址项目地址: https://gitcode.com/gh_mirrors/addr/address-parse去年有段时间我负责维护公司的订单后台最头疼的活就是把用户填的收货地址整理进数据库。电商订单里的地址五花八门太阳鲜鲜 盐田区山海四季城F栋17A13111111111、收货人: 杨燕艳\n手机号码: 13111111111\n所在地区: 广东省深圳市龙岗区龙岗街道、湛江市廉江市车板镇人才市场0755-22107333.曹建林 邮编713200。姓名、电话、省市区、详细地址全挤在一段字符串里格式还各不相同。我先后试过手写正则、找人标数据折腾了一周也没能覆盖所有情况。直到同事甩给我一个叫address-parse的开源项目——一个 Java 版的收货地址智能解析库这个问题才算真正解决。这篇文章就记录我把它接入项目、读源码、踩边界的全过程如果你也在处理类似的地址数据应该用得上。先看它一行调用能输出什么再决定要不要往下读我不喜欢先听一堆特性介绍直接看结果最实在。address-parse 的核心入口只有一个静态方法AddressParse.parse()传进去一段原始地址返回一个ParseResult列表String address 太阳鲜鲜 盐田区山海四季城F栋17A13111111111; ListParseResult results AddressParse.parse(address);上面那条姓名在开头、省略了省市的地址解析结果是姓名太阳鲜鲜手机13111111111省广东省市深圳市区盐田区详细地址山海四季城F栋17A注意一个细节原始字符串里根本没有广东省深圳市这几个字只有盐田区。它靠区名反查行政区划数据把省市区补全了。这正是智能二字的体现。项目自带的测试类AddressParseTest里准备了 44 条真实业务样本覆盖姓名在前在后、带座机、带邮编、换行分段、86 前缀国际号码、直辖市、县级市等各种情况我建议你接手这个库后第一件事就是跑一遍这些用例直观感受它的能力和边界。智能是怎么实现的三级降级策略和一张行政区划树只停留在好用层面是不够的我翻了一遍源码发现它的思路其实很朴素先洗数据再逐层匹配行政区划。整个流程可以分成四步都在AddressParse.parse()里串起来地址清洗把换行、制表符、多余空格压平去掉收货人联系电话所在地区这类冗余关键词再清掉逗号、括号等特殊符号。提取联系方式用正则依次抽走手机号、座机号、邮编并把它们从地址里删除避免干扰后续匹配。提取姓名剩下的字符串按空格切分取显示宽度最长的那一段作为姓名——因为中文地址里人名通常是宽度最突出的部分。匹配省市区这是核心也就是所谓的三级降级策略。第三步的具体做法值得一提。它按省→市→区的顺序做正向解析同时用市→区区做逆向解析最终合并结果。什么叫降级parseByProvince、parseByCity、parseByArea这三个方法分别从省级、市级、区县级出发去匹配优先尝试区县级匹配信息最精确匹配不到就退到市级再不行就省级兜底。所以像盐田区山海四季城F栋17A这种省略了省市县的地址能通过区名反向定位出广东省深圳市。支撑这套匹配的是AreaTree这个树形结构——34 个省级行政区、333 个地级市、2844 个县级区域数据来自src/main/resources/address-parse/china-area.json启动时加载进内存并构造成树。因为节点之间有parent和children指针解析器才能从盐田区一路向上找到深圳市广东省。顺带一提类里有一行日志地址解析器初始化耗时440 ms。初始化只做一次之后每次解析都是纯内存操作44 条样本整体跑完约 100 毫秒出头平均每条地址 2 到 3 毫秒放到高并发接口里完全够用。一个地址返回多个结果用 type 字段做选择第一次跑测试的人大概率会愣一下为什么一条地址解析出 3 条结果看测试输出比如谢先生深圳市龙岗区南湾街道尚峰花园4C2231 13111111111同时返回了类型CITY和类型AREA两条记录内容几乎一样。这是因为三级策略都命中了每条结果分别代表从不同层级切入得到的结论。ParseResult里有个type字段取值PROVINCE/CITY/DISTRICT标注了这条结果的来源层级。实际使用时通常按区县级 市级 省级的优先级取第一条或者直接调format()把结果拼成易读字符串再人工校验。ListParseResult results AddressParse.parse(address); if (!results.isEmpty()) { ParseResult best results.get(0); // 一般第一条最精确具体取哪条视业务而定 }另外注意极少数情况下不同层级会给出冲突的结果。测试输出里有个典型例子湖北省黄石市牧羊湖水机路华瑞南岸星城被市级解析正确识别为湖北省黄石市而逆向的区级解析却误判成重庆/南岸区——因为南岸这个词恰好是重庆的一个区名。代码里针对同省地区匹配错误做了专门处理但这类歧义在纯文本解析里无法 100% 消除所以我建议线上系统把返回结果记录到日志方便定期复盘调优。把它接进项目依赖和最小代码接入成本低到可以忽略。项目基于 MavenJDK 8 即可依赖了 Guava、Hutool、Apache Commons 这些常见库pom.xml已经全部配好。克隆下来后git clone https://gitcode.com/gh_mirrors/addr/address-parse之后引入核心类就能用不需要额外初始化。上面那段调用就是全部代码。如果想把选最准确结果的逻辑做得稳健一点可以包一层安全方法解析失败或结果为空时记日志、返回默认值避免异常直接打到业务层。解析不准时官方给你留了三扇后门没有任何解析库能覆盖所有脏数据好在 address-parse 在可扩展性上留了余地一是扩充屏蔽关键词。AddressParse.EXCLUDE_KEYS是个公开的静态列表默认已经包含收货人联系电话详细地址等常见词你可以往里面追加自己业务里出现的冗余词。二是自定义行政区划。行政数据在AreaTree里以标准树结构组织字段包括行政代码、邮政编码、区号、全名和简称。如果业务涉及特殊区域或行政区划调整可以按同样结构修改china-area.json后重新打包。三是结果校验兜底。比如必须有手机号、必须有详细地址这类业务校验写在解析之后信息不全的地址转入人工审核队列。解析器负责把文本拆开业务负责判断拆得对不对各司其职。诚实地说它适合什么场景又替代不了什么用了两个月后我给它画了个使用边界免得大家预期过高适合的电商订单、物流运单、用户资料清洗这类需要把混在一起的姓名、电话、地址拆开且省市区要尽量标准化的场景。它是纯本地运行不需要网络请求数据不出内网也没有按次计费的 API 成本性能和价格上都适合批量处理。不适合的它只识别到区县级AreaEnum里虽然定义了乡镇TOWN和村VILLAGE两个层级但解析并不会再往下细分。所以龙岗街道格水村三巷十号三楼里的街道村巷会原样留在详细地址里。另外对于极端歧义文本上文提到的跨省区名撞车它偶尔会给错答案需要业务层做二次校验。对比手写正则正则只能解决格式固定的地址遇到姓名在中间缺省市带冗余标签就崩对比第三方地址解析 API那个有网络依赖和费用而且数据要出内网。address-parse 正好填补了本地、免费、够用这个空档。从手工抄单到自动入库的最后一公里回到开头那个订单后台。接入 address-parse 后我做的事从人肉拆地址变成了解析结果 人工复核异常单处理效率提升了一个量级邮编、座机、手机号都自动归位省市区信息也统一了格式。它没有魔法就是用三级降级匹配加完整的行政区划数据把大部分脏地址处理在了程序里。如果你也在写 Java也正被收货地址数据折磨不妨按上面的步骤把它跑起来。先把项目里的AddressParseTest完整看一遍——那 44 条真实样本就是最好的使用文档。【免费下载链接】address-parseJava 版智能解析收货地址项目地址: https://gitcode.com/gh_mirrors/addr/address-parse创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Chrome全屏截图插件终极指南:一键截取整页长图,告别手动拼图

Chrome全屏截图插件终极指南:一键截取整页长图,告别手动拼图

Chrome全屏截图插件终极指南:一键截取整页长图,告别手动拼图 【免费下载链接】full-page-screen-capture-chrome-extension One-click full page screen captures in Google Chrome 项目地址: https://gitcode.com/gh_mirrors/fu/full-page-screen-cap…

2026/8/19 0:56:52 阅读更多 →
3 步搞定按设备滚动方向设置:Scroll Reverser 完整使用指南

3 步搞定按设备滚动方向设置:Scroll Reverser 完整使用指南

3 步搞定按设备滚动方向设置:Scroll Reverser 完整使用指南 【免费下载链接】Scroll-Reverser Per-device scrolling prefs on macOS. 项目地址: https://gitcode.com/gh_mirrors/sc/Scroll-Reverser 你的 Mac 可能同时连着触控板和鼠标:用触控板…

2026/8/19 0:56:51 阅读更多 →
英雄联盟战绩查询工具Seraphine完整指南:把BP情报与自动操作一次搞定

英雄联盟战绩查询工具Seraphine完整指南:把BP情报与自动操作一次搞定

英雄联盟战绩查询工具Seraphine完整指南:把BP情报与自动操作一次搞定 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine 排位赛进入BP阶段,你想禁掉对手最擅长的英雄,却连对面…

2026/8/19 0:56:51 阅读更多 →

最新新闻

三步装好欢乐斗地主AI助手:让DouZero替你把胜率算明白

三步装好欢乐斗地主AI助手:让DouZero替你把胜率算明白

三步装好欢乐斗地主AI助手:让DouZero替你把胜率算明白 【免费下载链接】DouZero_For_HappyDouDiZhu 基于DouZero定制AI实战欢乐斗地主 项目地址: https://gitcode.com/gh_mirrors/do/DouZero_For_HappyDouDiZhu 周末晚上开了一局斗地主,手里攥着两…

2026/8/19 1:25:06 阅读更多 →
还在手动复制 Cookie?用 Get cookies.txt LOCALLY 一次搞定导出与自动化

还在手动复制 Cookie?用 Get cookies.txt LOCALLY 一次搞定导出与自动化

还在手动复制 Cookie?用 Get cookies.txt LOCALLY 一次搞定导出与自动化 【免费下载链接】Get-cookies.txt-LOCALLY Get cookies.txt, NEVER send information outside. 项目地址: https://gitcode.com/gh_mirrors/ge/Get-cookies.txt-LOCALLY 如果你做过爬虫…

2026/8/19 1:25:06 阅读更多 →
基于ESP32与PID算法的智能烤面包机系统:从传感器到闭环控制

基于ESP32与PID算法的智能烤面包机系统:从传感器到闭环控制

1. 项目概述:从“烤面包”到“自动化早餐管家”“Automated Toaster System”,字面翻译是“自动烤面包机系统”。乍一听,你可能觉得这玩意儿不就是个带定时器的烤面包机吗?但如果你真这么想,那就太小看这个领域了。我折…

2026/8/19 1:25:06 阅读更多 →
温度传感器选型、电路设计与系统集成实战指南

温度传感器选型、电路设计与系统集成实战指南

1. 温度传感器:从感知到决策的桥梁 温度,这个我们每天都能感知到的物理量,在工业、科研和日常生活中扮演着至关重要的角色。无论是确保芯片稳定运行,还是监控食品冷链安全,亦或是智能家居的自动调节,背后都…

2026/8/19 1:25:06 阅读更多 →
温度传感器实战指南:从原理选型到系统设计避坑

温度传感器实战指南:从原理选型到系统设计避坑

1. 项目概述:从“温度传感器”到感知世界的触角温度传感器,听起来像是个实验室里或者工业设备上的专业部件,离我们的日常生活很远。但如果你环顾四周,会发现它无处不在。你手机里有个小芯片在实时监测CPU温度,防止过热…

2026/8/19 1:25:06 阅读更多 →
YOLO目标检测中LoRA微调位置策略:Neck与Head是关键

YOLO目标检测中LoRA微调位置策略:Neck与Head是关键

1. 项目缘起:当YOLO遇上LoRA,微调的“手术刀”该切向哪里?最近在折腾一个工业质检的项目,客户给的样本数据量不大,但缺陷种类刁钻,直接用预训练的YOLOv8去跑,效果总差那么点意思。常规的微调&am…

2026/8/19 1:24:04 阅读更多 →

日新闻

【单片机课程设计/毕业设计】基于 STM32 与 WiFi 模块的室内通风智能管控系统设计 基于 STM32 的人体存在感知自适应风扇控制系统设计(018503)

【单片机课程设计/毕业设计】基于 STM32 与 WiFi 模块的室内通风智能管控系统设计 基于 STM32 的人体存在感知自适应风扇控制系统设计(018503)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/8/19 0:00:30 阅读更多 →
AI如何驱动数学猜想生成:从大语言模型到自动化数学发现

AI如何驱动数学猜想生成:从大语言模型到自动化数学发现

1. 项目概述:当AI开始“猜”数学定理 最近在AI研究圈里,一个名为“Moonshine”的项目引起了不小的讨论。这名字本身就挺有意思,直译是“月光”,但在数学史上,它特指一个神秘而美丽的联系——魔群月光猜想,连…

2026/8/19 0:00:30 阅读更多 →
WarcraftHelper 魔兽争霸3优化实战指南

WarcraftHelper 魔兽争霸3优化实战指南

WarcraftHelper 魔兽争霸3优化实战指南 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 一台刚配的新电脑,跑《魔兽争霸3》却卡成 PPT——这…

2026/8/19 0:02:31 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/18 9:15:35 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/18 9:06:28 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/18 9:04:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/17 18:54:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/17 18:55:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/17 18:55:55 阅读更多 →