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

  • 相关阅读:
    文件共享锁定数溢出(AC等修改数据多出错)
    智能五子棋基本思路
    API与C#数据结构类型对应关系表
    读书释疑C#浅拷贝与深拷贝
    冒泡排序(C#数据结构学习九)
    希尔排序(C#数据结构学习八)
    fatal error LNK1169: 找到一个或多个多重定义的符号
    Solo Spirit系统精灵(含C#源码)
    插入排序(C#数据结构学习七)
    快速排序(C#数据结构学习十)
  • 原文地址:https://www.cnblogs.com/Qi77/p/12515842.html
Copyright © 2020-2023  润新知