1. 程式人生 > 其它 >Java 拆分詳細地址中的省、市、區、地址

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; } }