一、部分主要源代码以及结果截图
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