利用正則表達式,分割地址至省市縣,更新MySQL數據庫數據


一、部分主要源代碼以及結果截圖

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public static void main(String[] args){
    
    Connection conn = DBUtil.getConn();
    List<String> lists=new ArrayList<String>();
    String city=null;
    String str=new String();
    String str1=new String();
   // String str1=new String();
    try {
        Statement state = conn.createStatement();

        ResultSet rs = state.executeQuery("select 詳細地域,id from c_2");
        while(rs.next()) {
            //如果有結果,是認為是通過驗證了
            str=rs.getString("詳細地域");
            System.out.println(str);
            str1=rs.getString("id");
            
            if (str != null)
            {
                String newStr=addressResolution(str);
                System.out.println(newStr);
                update_city(newStr,str1);
            }
 }
    } catch (Exception e)
    {
        e.printStackTrace();
    }
    }
    
    public static String addressResolution(String address){
        String regex="(?<province>[^省]+省|[^自治區]+自治區|.+市)(?<city>[^自治州]+自治州|.+區划|[^市]+市|.+區)?(?<county>[^市]+市|[^縣]+縣|[^旗]+旗|.+區)?(?<town>[^區]+區|.+鎮)?(?<village>.*)";
        Matcher m=Pattern.compile(regex).matcher(address);
        String province=null,city=null,county=null;
        String str="";
        while(m.find()){
            province=m.group("province");
            city=m.group("city");
            county=m.group("county");
            if(province.equals("北京市"))
            {
                str = province + city;
                //System.out.println(str);
            }else if(province.equals("天津市"))
            {
                str = province + city;
            }else {
                str = province + city + county;
                //System.out.println(str);
            }
        }
        return str;
    }
    public static void update_city(String newStr,String str1) {

           // String sql = "update kejichengguo1 set diyu ='"+city+"' where  wanchengdanwei ='"+value+"'";
            String sql = "update c_2 set 詳細地域 ='"+newStr+"' where  id ='"+str1+"'";
            Connection conn = DBUtil.getConn();
            Statement state = null;
            try {
                state = conn.createStatement();
                state.executeUpdate(sql);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                DBUtil.close(state, conn);
            }
        }
View Code

二、相關知識

1.java.util.regex包下的Pattern類與Matcher類簡單解釋

java.util.regex  ——  匹配字符序列與正則表達式指定的模式的類。

java.util.regex.Matcher  ——  執行上匹配操作的引擎character sequence通過解釋Pattern ;通過調用模式的matcher方法從模式創建匹配器。

java.util.regex.Pattern  ——  正則表達式的編譯表示;必須首先將正則表達式(指定為字符串)編譯為此類的實例

public static Pattern compile(String regex,
                              int flags)
 
將給定的正則表達式編譯為帶有給定標志的模式。
參數
regex - 要編譯的表達式
flags -匹配標志,一個位掩碼,可能包括 CASE_INSENSITIVE , MULTILINE , DOTALL , UNICODE_CASE , CANON_EQ , UNIX_LINES , LITERAL , UNICODE_CHARACTER_CLASS和 COMMENTS
結果
給定的正則表達式編譯成帶有給定標志的模式
public static boolean matches(String regex,
                              CharSequence input)

 

調用這種方便的方式的形式

 Pattern.matches(regex, input);

表現方式與表達式完全相同

 Pattern.compile(regex).matcher(input).matches()

如果一個模式多次被使用,編譯一次並重用它將比每次調用此方法更有效。

編譯給定的正則表達式,並嘗試匹配給定的輸入。

參數

    regex - 要編譯的表達式input - 要匹配的字符序列

結果

    正則表達式是否匹配輸入

代碼中即使用了編譯一次並進行了多次重用

Matcher m=Pattern.compile(regex).matcher(address);

Pattern與Matcher一起合作,Matcher類提供了對正則表達式的分組支持,以及對正則表達式的多次匹配支持.;單獨用Pattern只能使用Pattern.matcher(String regex,CharSequence input)一種最基礎最簡單的匹配。

2.利用正則表達式分割地區至省市縣

String regex="(?<province>[^省]+省|[^自治區]+自治區|.+市)(?<city>[^自治州]+自治州|.+區划|[^市]+市|.+區)?(?<county>[^市]+市|[^縣]+縣|[^旗]+旗|.+區)?(?<town>[^區]+區|.+鎮)?(?<village>.*)";

上述正則表達式根據自己所需的地區可以進行修改

(?<province>[^省]+省|[^自治區]+自治區|.+市)

河北省 | 內蒙古自治區 | 北京市
用詞來進行相同級別的省份的不同格式的名稱

 

 參考資料:

http://www.matools.com/api/java8

 

https://www.cnblogs.com/tongxuping/p/7832895.html

http://www.manongjc.com/detail/14-vgrsgxvcghjuqmz.html

https://baijiahao.baidu.com/s?id=1619248706057580421&wfr=spider&for=pc


免責聲明!

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



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