Java 拆分詳細地址中的省、市、區、地址


package com.taiping.test;

import java.util.Arrays;

public class Test14 {
    
    public static void main(String[] args) {
        
        String[] a = Test14.converDetailAddressToProvinceAndCityAndCountyAndStreet("廣東省深圳市福田區新聞路2023號");
        
        System.out.println(a);
        
        for (int i = 0; i < a.length; i++) {
            System.out.println(a[i]);
        }
//        廣東省
//        深圳市
//        福田區
//        新聞路2023號
    }

    /**
     * 處理詳細地址拆分省 市 區 地址的轉換關系
     * 
     * @param detailAddress
     * @return
     */
    public static String[] converDetailAddressToProvinceAndCityAndCountyAndStreet(
            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;
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM