利用正则表达式,分割地址至省市县,更新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

原文地址:https://www.cnblogs.com/Qi77/p/12515842.html