利用正则表达式,分割地址至省市县,更新MySQL数据库数据

摘要:
lists=newArrayList<//Stringstr1=newString();try{Statementstate=con.createStatement();Matcherm=Pattern.compile(regex).matcher(地址);city=m.group(“城市”);county=m.group(“县”);

一、部分主要源代码以及结果截图

利用正则表达式,分割地址至省市县,更新MySQL数据库数据第1张利用正则表达式,分割地址至省市县,更新MySQL数据库数据第2张
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

利用正则表达式,分割地址至省市县,更新MySQL数据库数据第3张

二、相关知识

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

免责声明:文章转载自《利用正则表达式,分割地址至省市县,更新MySQL数据库数据》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇中文分词工具探析(一):ICTCLAS (NLPIR)全网最详细的CentOS7里安装MySQL时出现No package mysql-server available错误的解决办法(图文详解)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Vue教程:组件Component详解(六)

一.什么是组件? 组件 (Component) 是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,封装可重用的代码。在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功能。在有些情况下,组件也可以表现为用 is 特性进行了扩展的原生 HTML 元素。 所有的 Vue 组件同时也都是 Vue 的实例,所以可接受相同的选项对象...

评论功能的简单实现

最近在写一个问答功能,类似于评论,几番找资料才有点感觉(主要是太菜了),为了加深印象就单独抽出来记下笔记,然后这篇写完就开始SpringBoot的复习了 1. 说明 网上看到有三种类型的评论,按照笔者的理解记下了过程(可能理解错了,望大神指出),所以列出的是笔者的理解,下面以模拟博客评论的场景来说明,(这些类型是笔者形容的,并没有这个词),总觉得很慌理解...

Android使用PopupMenu创建弹出式菜单

PopupMenu 代表弹出式菜单,它会在指定组件上弹出PopupMenu,在默认情况下PopupMenu会显示在该组件的下方或者上方。PopupMenu可增加多个菜单项,并可以为菜单项增加子菜单。 实现效果: 实现步骤: 步骤一: 创建主布局文件: <?xml version="1.0" encoding="utf-8"?> <Lin...

Postgresql数据库的一些字符串操作函数(转)

今天做项目遇到客户反映了一个麻烦的事情,有一些数据存在,但就是在程序中搜索不出来,后来分析,发现问题为数据前面有几个空白字符,后来用SQL 查询了一下,发现八九个数据表中,数千万条数据中有将近三百万条数据存在相同的问题,本想着在查询时添加匹配符'%',后来试运行了一下,发现不可行,因 为尚有很多其它页面存在类似的搜索问题,并且这样会极大地影响到查询的速度,...

nginx+tomcat+java部署总结

昨天部署了一下nginx+tomcat+java出现了很多问题,以下为整理总结。 使用了两种部署方式,一种是源码部署,一种是war部署。 java源码部署总结: 环境:nginx+tomcat 部署方式:源码部署 1 源码目录/chroot2/test/schedule 目录下面就是所有源码了 2 tomcat 位置: /usr/local/tomc...

前端解决跨域问题的八种方案

1.同源策略如下: URL 说明 是否允许通信 http://www.a.com/a.jshttp://www.a.com/b.js 同一域名下 允许 http://www.a.com/lab/a.jshttp://www.a.com/script/b.js 同一域名下不同文件夹 允许 http://www.a.com:8000/a.jsh...