java从地址串中解析提取省市区-完美匹配中国所有地址

前段时间项目中要解析android定位传的一个地址串 分别存入 省 市 区 字段,网上找的 写正则 的方法大都只能解析 xx省xx市xx区 这样的大众化地址,而对于一些命名比较特别的地址(比如:西藏自治区日喀则地区日喀则市 / 海南省省直辖县级行政单位中沙群岛的岛礁及其海域)就会出问题,我就将正则式进行了修改完善。废话不多说 直接上代码:

package com.jt.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;

public class AddressResolutionUtil {
	
	/**
     * 解析地址
     * @author lin
     * @param address
     * @return
     */
    public static List<Map<String,String>> addressResolution(String address){
        String regex="(?<province>[^省]+自治区|.*?省|.*?行政区|.*?市)(?<city>[^市]+自治州|.*?地区|.*?行政单位|.+盟|市辖区|.*?市|.*?县)(?<county>[^县]+县|.+区|.+市|.+旗|.+海域|.+岛)?(?<town>[^区]+区|.+镇)?(?<village>.*)";
        Matcher m=Pattern.compile(rege
  • 12
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 40
    评论
您可以使用正则表达式来解析地址字符串。以下是一个简单的例子,假设您的地址字符串的格式为"省份 城市 区/县/市 辖区/街道/乡/镇 详细地址": ```java import java.util.regex.Matcher; import java.util.regex.Pattern; public class AddressParser { public static void main(String[] args) { String address = "浙江省 杭州市 西湖区 西溪街道 123号"; String province = ""; String city = ""; String district = ""; String street = ""; String detail = ""; // 正则表达式模式 String pattern = "^(\\S+)\\s(\\S+)\\s(\\S+)\\s(\\S+)\\s(.+)$"; Pattern regex = Pattern.compile(pattern); Matcher matcher = regex.matcher(address); if (matcher.find()) { province = matcher.group(1); city = matcher.group(2); district = matcher.group(3); street = matcher.group(4); detail = matcher.group(5); } System.out.println("省份: " + province); System.out.println("城市: " + city); System.out.println("区/县/市: " + district); System.out.println("街道/乡/镇: " + street); System.out.println("详细地址: " + detail); } } ``` 上述代码,我们使用了正则表达式模式 `^(\\S+)\\s(\\S+)\\s(\\S+)\\s(\\S+)\\s(.+)$` 来匹配地址字符串。`\S` 表示非空白字符,`+` 表示一个或多个,`\\s` 表示空白字符。 请注意,这只是一个简单的示例,仅适用于特定的地址字符串格式。如果您的地址字符串格式不同,您可能需要调整正则表达式模式来匹配您的情况。此外,这种解析方法也可能无法解析一些特殊情况,例如省市区名称包含空格或特殊字符的情况。
评论 40
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

superSubfn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值