一、部分主要源代码以及结果截图
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 voidmain(String[] args){
Connection conn=DBUtil.getConn();
List lists=new ArrayList();
String city=null;
String str=newString();
String str1=newString();//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 staticString addressResolution(String address){
String regex="(?[^省]+省|[^自治区]+自治区|.+市)(?[^自治州]+自治州|.+区划|[^市]+市|.+区)?(?[^市]+市|[^县]+县|[^旗]+旗|.+区)?(?[^区]+区|.+镇)?(?.*)";
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);
}
}returnstr;
}public static voidupdate_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)
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="(?[^省]+省|[^自治区]+自治区|.+市)(?[^自治州]+自治州|.+区划|[^市]+市|.+区)?(?[^市]+市|[^县]+县|[^旗]+旗|.+区)?(?[^区]+区|.+镇)?(?.*)";
上述正则表达式根据自己所需的地区可以进行修改
(?[^省]+省|[^自治区]+自治区|.+市)
河北省 | 内蒙古自治区 | 北京市
用词来进行相同级别的省份的不同格式的名称
参考资料: