当前位置: 首页 > news >正文

快递地址归类排序实现(Java Python)

Java 实现

import java.util.*;
import java.util.regex.*;public class AddressProcessor {// 地址正则表达式(简化版,实际应用需要更复杂的正则)private static final Pattern ADDRESS_PATTERN = Pattern.compile("(?<province>[^省]+省|[^自治区]+自治区|[^市]+市)(?<city>[^市]+市|[^自治州]+自治州|[^区]+区|[^县]+县)(?<county>[^区]+区|[^县]+县|[^旗]+旗)?(?<town>[^镇]+镇|[^乡]+乡|[^街道]+街道)?(?<detail>.*)");public static void main(String[] args) {List<String> addresses = Arrays.asList("广东省深圳市南山区科技园街道科技南一路1号","浙江省杭州市西湖区文三路100号","北京市朝阳区建国门外大街1号","上海市浦东新区陆家嘴环路100号","广东省广州市天河区体育西路1号","江苏省南京市鼓楼区北京西路1号");// 解析并归类地址Map<String, Map<String, List<String>>> classifiedAddresses = classifyAddresses(addresses);// 打印归类结果printClassifiedAddresses(classifiedAddresses);}public static Map<String, Map<String, List<String>>> classifyAddresses(List<String> addresses) {Map<String, Map<String, List<String>>> result = new TreeMap<>();for (String address : addresses) {Matcher matcher = ADDRESS_PATTERN.matcher(address);if (matcher.find()) {String province = matcher.group("province");String city = matcher.group("city");// 确保省份存在if (!result.containsKey(province)) {result.put(province, new TreeMap<>());}// 确保城市存在if (!result.get(province).containsKey(city)) {result.get(province).put(city, new ArrayList<>());}// 添加地址到对应城市result.get(province).get(city).add(address);}}// 对每个城市的地址列表进行排序for (Map<String, List<String>> provinceMap : result.values()) {for (List<String> cityAddresses : provinceMap.values()) {Collections.sort(cityAddresses);}}return result;}public static void printClassifiedAddresses(Map<String, Map<String, List<String>>> classifiedAddresses) {for (Map.Entry<String, Map<String, List<String>>> provinceEntry : classifiedAddresses.entrySet()) {System.out.println(provinceEntry.getKey() + ":");for (Map.Entry<String, List<String>> cityEntry : provinceEntry.getValue().entrySet()) {System.out.println("  " + cityEntry.getKey() + ":");for (String address : cityEntry.getValue()) {System.out.println("    " + address);}}System.out.println();}}
}

Python 实现

import re
from collections import defaultdict# 地址正则表达式(简化版)
ADDRESS_PATTERN = re.compile(r'(?P<province>[^省]+省|[^自治区]+自治区|[^市]+市)'r'(?P<city>[^市]+市|[^自治州]+自治州|[^区]+区|[^县]+县)'r'(?P<county>[^区]+区|[^县]+县|[^旗]+旗)?'r'(?P<town>[^镇]+镇|[^乡]+乡|[^街道]+街道)?'r'(?P<detail>.*)'
)def classify_addresses(addresses):"""归类排序快递地址"""result = defaultdict(lambda: defaultdict(list))for address in addresses:match = ADDRESS_PATTERN.match(address)if match:province = match.group('province')city = match.group('city')# 添加到对应的省份和城市result[province][city].append(address)# 对结果进行排序sorted_result = {}for province in sorted(result.keys()):sorted_cities = {}for city in sorted(result[province].keys()):sorted_cities[city] = sorted(result[province][city])sorted_result[province] = sorted_citiesreturn sorted_resultdef print_classified_addresses(classified_addresses):"""打印归类后的地址"""for province, cities in classified_addresses.items():print(f"{province}:")for city, addresses in cities.items():print(f"  {city}:")for address in addresses:print(f"    {address}")print()if __name__ == "__main__":addresses = ["广东省深圳市南山区科技园街道科技南一路1号","浙江省杭州市西湖区文三路100号","北京市朝阳区建国门外大街1号","上海市浦东新区陆家嘴环路100号","广东省广州市天河区体育西路1号","江苏省南京市鼓楼区北京西路1号"]classified = classify_addresses(addresses)print_classified_addresses(classified)

说明

  1. 地址解析

    • 使用正则表达式解析地址中的省、市、区等信息

    • 实际应用中可能需要更复杂的正则表达式或专门的地址解析库

  2. 归类排序

    • 按省份归类

    • 每个省份下按城市归类

    • 每个城市下的地址按字母顺序排序

    • 扩展性

      • 可以添加更详细的地址解析(区、街道等)

      • 可以支持更多的排序方式(如按邮编、按距离等)

广东省:
广州市:
广东省广州市天河区体育西路1号
深圳市:
广东省深圳市南山区科技园街道科技南一路1号

浙江省:
杭州市:
浙江省杭州市西湖区文三路100号

http://www.xdnf.cn/news/1423603.html

相关文章:

  • 查看服务器设备是否为物理机
  • Linux内核进程管理子系统有什么第三十九回 —— 进程主结构详解(35)
  • 算法练习——169.多数元素
  • 教育项目管理工具新趋势:可视化与自动化如何提升效率?
  • XGBoost学习笔记
  • 故障排查指南:理解与解决 “No route to host“ 错误
  • 【科普向-第七篇】Git全家桶介绍:Git/Gitlab/GitHub/TortoiseGit/Sourcetree
  • std::map::try_emplace完全详解
  • 从 Oracle 到 TiDB,通过ETL工具,高效实现数据拉通
  • 并发 -- JUC(java.util.concurrent) 包的简单介绍
  • NebulaAI V2.7.0发布:MCP广场正式上线!
  • FFMPEG 10BIT下 Intel b570 qsv 硬解AV1,H265视频编码测试
  • 【项目思维】贪吃蛇(嵌入式进阶方向)
  • 光学神经网络与人工智能应用
  • 【XR技术概念科普】详解6DoF:为什么它是沉浸感的关键?
  • 贝叶斯向量自回归模型 (BVAR)
  • 【Java】Redis(中间件)
  • 从API调用到效果呈现:面具特效功能在直播美颜SDK中的应用实践
  • Redis 八股
  • 中国家具百强「库斯家居」携手 企企通:启动 SRM 项目,构筑采购数字化新生态
  • Android/Java 中创建类实例的各种模式
  • nestjs 发起请求 axios
  • 3-6〔OSCP ◈ 研记〕❘ WEB应用攻击▸WEB应用枚举B
  • 【STM32】状态机(State Machine)
  • 证明与激励:Walrus 可编程数据如何通过激励可用性证明获得安全性
  • SpringBoot学习日记 Day9:响应式编程新世界探索
  • 【跨境知识】密文面单
  • Linux常用命令行大全:14个核心指令详解+实战案例
  • 多线程——线程的休眠、中断和等待
  • Markdown 语法全面指南