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

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); } }
二、相關知識
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)
|
將給定的正則表達式編譯為帶有給定標志的模式。
|
public static boolean matches(String regex,
CharSequence 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