java后台如何利用Pattern提取所需字符详解

目录
  • 写在处理问题的前面
  • 遇到的问题,如何提取?
    • 1.首先进行简单测试
    • 2.项目内容测试
    • 3.进行实操
  • 附:JAVA Pattern正则获取大括号中内容
  • 总结

写在处理问题的前面

由于项目功能迭代,导致原来的页面当中ID命名规则,与当前命名规则不同(ps:既然要用到原来的东西,为什么在设计的时候没有考虑到兼容的问题,无语),所以需要将原来的所有ID提取出来。

遇到的问题,如何提取?

查找了许多方法之后,感觉使用Pattern提取比较符合需求。于是开始尝试。

1.首先进行简单测试

String str = "{abc<icon>{def:</icon>}deftfh<icon>a</icon>}";
Pattern p=Pattern.compile("<icon>\\{(\\w+)\\:</icon>");
Matcher m=p2.matcher(str2);
        while(m.find()){
            System.out.println(m.group(1));
            }

好的没问题,提取正常。于是将所需提取的一部分字符串拿出来进行测试。

2.项目内容测试

String str = "\"EquipmentID\":\"SSC_FZ_DQ#MJ23JZ_FZ_CZ_CZGX#YL#SBBM\",";
Pattern p=Pattern.compile("\"EquipmentID\":\"(\\w+)\",");
Matcher m=p2.matcher(str2);
        while(m.find()){
            System.out.println(m.group(1));
            }

问题来了,没有提取到任何内容。那试试只提取EquipmentID当中的字符呢,测试没问题。问题就在正则匹配上了。(\\w+)只适用于截取文字部分,改为(.*),ok,可以正常截取SSC_FZ_DQ#MJ23JZ_FZ_CZ_CZGX#YL#SBBM这部分了。

3.进行实操

建立数据库连接。

public class CopyOracle2MySQL1 {
    /**
     * 源数据库,目标数据库的连接配置
      */
    private final String DEST_MYSQL_JDBC_URL = ;
    private final String SOURCE_JDBC_URL = "";
    private final String SOURCE_JDBC_USER = "";
    private final String SOURCE_JDBC_PASSWORD = "";

    public void startImport() throws Exception {
        // 创建到两个数据库的连接
        Class.forName("com.mysql.jdbc.Driver");
        //Class.forName("oracle.jdbc.driver.OracleDriver");

        Connection connDest = DriverManager.getConnection(DEST_MYSQL_JDBC_URL);
        //Connection connSource = DriverManager.getConnection(SOURCE_JDBC_URL, SOURCE_JDBC_USER, SOURCE_JDBC_PASSWORD);

        try {

            // 人工输入各表名(需要保证顺序,以确保有外键的表在主表之后插入数据)
            importTable(connDest, "APP_WGADDATA","qtsc_jk_scjkzttxx");

        } finally {
            // 自动关闭数据库资源
            connDest.close();
            //connSource.close();
        }
    }

    private void importTable(Connection connDest, String oracleTableName,String mysqlTableName) throws Exception {

        Statement stmt = null;

        try {

            stmt = connDest.createStatement();
            String mysqlSql = "select ZTTNR from qtsc_jk_scjkzttxx qjs where qjs.ZTTID  = '0284fcbdcdbd4da3bdef78ed769515c6'";
            String mysqlSql1 = "select ZTTNR from qtsc_jk_scjkzttxx";
            ResultSet rs = stmt.executeQuery(mysqlSql1);

            Map<String, String> sbbmMap = new HashMap();
            while(rs.next()){
                String zttnr = rs.getString(1);
                //System.out.println(zttnr);
                Pattern p = Pattern.compile("\"EquipmentID\":\"(.*)\",\"UnitName\"");
                Matcher m=p.matcher(zttnr);
                while(m.find()){
                    System.out.println(m.group(1));

                }
                //System.out.println(sbbmMap);
            }

            // 先计算目标数据库的PreparedStatement的SQL语句z
            ResultSetMetaData rsmd = rs.getMetaData();

            rs.close();
        }catch (Exception e){

            e.printStackTrace();
        }
        finally {
            if(stmt != null) {
                stmt.close();
            }
        }
    }

    public static void main(String[] args) throws Exception {
        CopyOracle2MySQL1 ins = new CopyOracle2MySQL1();
        ins.startImport();
    }

测试结果发现,在所有符合规则的前期下进行提取,发现,自动匹配到了最后一个",“UnitName”,很显然又是规则的问题,于是将(.)改为(.?)问题解决。

附:JAVA Pattern正则获取大括号中内容

利用正则表达式获取字符串中想要的值:

获取符串场景: 你好呀(嘻嘻)

我需要获取“嘻嘻” 该如何获取呢?

1.通过正则表达式获取:

        String str = "你好呀(嘻嘻)";
        Pattern p = Pattern.compile("\\(([^\\)]+)");
        Matcher matcher = p.matcher(str);
        if (matcher.find() && matcher.groupCount() >= 1){
            System.out.println(matcher.group(1));
        }

2.通过字符截取获取:

        String str = "你好呀(嘻嘻)";
        String xixi = str.substring(str.indexOf("(") + 1, str.indexOf(")"));
        System.out.println(xixi);

总结

到此这篇关于java后台如何利用Pattern提取所需字符的文章就介绍到这了,更多相关java用Pattern提取所需字符内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解Java正则表达式中Pattern类和Matcher类

    前言 本文将介绍Java正则表达式中的Pattern类与Matcher类.首先我们要清楚指定为字符串的正则表达式必须首先被编译为pattern类的实例.因此如何更好的了解这两个类,是编程人员必须知道的. 以下我们就分别来看看这两个类: 一.捕获组的概念 捕获组可以通过从左到右计算其开括号来编号,编号是从1 开始的.例如,在表达式 ((A)(B(C)))中,存在四个这样的组: 1 ((A)(B(C))) 2 (A) 3 (B(C)) 4 (C) 组零始终代表整个表达式. 以 (?) 开头的组是纯的

  • JAVA正则表达式 Pattern和Matcher

    1.简介: java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包. 它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表现模式. Matcher 一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查. 首先一个Pattern实例订制了一个所用语法与PERL的类似的正则表达式经编译后的模式,然后一个Matcher实例在这个给定的Pattern实例的模式控制下进行字

  • java后台如何利用Pattern提取所需字符详解

    目录 写在处理问题的前面 遇到的问题,如何提取? 1.首先进行简单测试 2.项目内容测试 3.进行实操 附:JAVA Pattern正则获取大括号中内容 总结 写在处理问题的前面 由于项目功能迭代,导致原来的页面当中ID命名规则,与当前命名规则不同(ps:既然要用到原来的东西,为什么在设计的时候没有考虑到兼容的问题,无语),所以需要将原来的所有ID提取出来. 遇到的问题,如何提取? 查找了许多方法之后,感觉使用Pattern提取比较符合需求.于是开始尝试. 1.首先进行简单测试 String s

  • Go Java算法之字符串中第一个唯一字符详解

    目录 字符串中第一个唯一字符 方法一:哈希表(Java) 方法二:队列(Go) 字符串中第一个唯一字符 给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 .如果不存在,则返回 -1 . 示例 1: 输入: s = "leetcode" 输出: 0 示例 2: 输入: s = "loveleetcode" 输出: 2 示例 3: 输入: s = "aabb" 输出: -1 提示: 1 <= s.length <= 10

  • Java利用深度搜索解决数独游戏详解

    目录 一.问题描述 二.输入和输出 三.输入和输出样例 四.分析 五.算法设计 六.代码 七.测试 一.问题描述 数独是一项非常简单的任务.如下图所示,一张 9 行 9 列的表被分成 9 个 3*3 的小方格.在一些单元格中写上十进制数字 1~9,其他单元格为空.目标是用 1 ~9 的数字填充空单元格,每个单元格一个数字,这样在每行.每列和每个被标记为 3*3 的子正方形内,所有 1~9 的数字都会出现.编写一个程序来解决给定的数独任务. 二.输入和输出 1.输入 对于每个测试用例,后面都跟 9

  • Java利用redis zset实现延时任务详解

    目录 一.实现原理 二.准备工作 三.代码实现 四.优缺点 所谓的延时任务给大家举个例子:你买了一张火车票,必须在30分钟之内付款,否则该订单被自动取消.「订单30分钟不付款自动取消,这个任务就是一个延时任务.」   我之前已经写过2篇关于延时任务的文章: <通过DelayQueue实现延时任务> <基于netty时间轮算法实战> 这两种方法都有一个缺点:都是基于单体应用的内存的方式运行延时任务的,一旦出现单点故障,可能出现延时任务数据的丢失.所以此篇文章给大家介绍实现延时任务的第

  • Java利用Selenium操作浏览器的示例详解

    目录 简介 设置元素等待 显式等待 隐式等待 强制等待 总结 简介 本文主要介绍如何使用java代码利用Selenium操作浏览器,某些网页元素加载慢,如何操作元素就会把找不到元素的异常,此时需要设置元素等待,等待元素加载完,再操作. 设置元素等待 很多页面都使用 ajax 技术,页面的元素不是同时被加载出来的,为了防止定位这些尚在加载的元素报错,可以设置元素等来增加脚本的稳定性.webdriver 中的等待分为 显式等待 和 隐式等待. 显式等待 显式等待:设置一个超时时间,每个一段时间就去检

  • SpringBoot利用AOP实现一个日志管理详解

    目录 1. 需求 2. 新建一张日志表 3. 写相应的Controller层 4.Service接口层 5.Service实现 6.Mapper接口 7.Mapper.xml(我用的是Mybatis) 8.CspLog 9.实体类SysOperCspLog 10. 定义日志管理的切面 11.AsyncFactoryCsp 12. 写一个Controller的Demo来执行一条日志试试 1. 需求 目前有这么个问题,有两个系统CSP和OMS,这俩系统共用的是同一套日志操作:Log;目前想区分下这俩

  • Java躲不过设计模式的坑之代理模式详解

    目录 前言 使用场景 代码分析 总结 前言 设计模式在我看来更像是一种设计思维或设计思想,它就像<孙子兵法>一样,为你的项目工程提供方向,让你的项目工程更加健壮.灵活,延续生命力.本文即将分享的是设计模式的其中一种:代理模式. 代理模式 通用官方定义:代理模式(Proxy Pattern) 是一种结构型设计模式,通过代理对象控制对原对象的访问,并允许在访问前或访问后做一些处理. 简单理解就是给一个对象找了一个替代品,这个替代品得到原对象授权,可以拦截一些无效或低效的访问,从而使得原对象可以释放

  • 基于Java中最常用的集合类框架之HashMap(详解)

    一.HashMap的概述 HashMap可以说是Java中最常用的集合类框架之一,是Java语言中非常典型的数据结构. HashMap是基于哈希表的Map接口实现的,此实现提供所有可选的映射操作.存储的是对的映射,允许多个null值和一个null键.但此类不保证映射的顺序,特别是它不保证该顺序恒久不变. 除了HashMap是非同步以及允许使用null外,HashMap 类与 Hashtable大致相同. 此实现假定哈希函数将元素适当地分布在各桶之间,可为基本操作(get 和 put)提供稳定的性

  • python正则表达式从字符串中提取数字的思路详解

    python从字符串中提取数字 使用正则表达式,用法如下: ## 总结 ## ^ 匹配字符串的开始. ## $ 匹配字符串的结尾. ## \b 匹配一个单词的边界. ## \d 匹配任意数字. ## \D 匹配任意非数字字符. ## x? 匹配一个可选的 x 字符 (换言之,它匹配 1 次或者 0 次 x 字符). ## x* 匹配0次或者多次 x 字符. ## x+ 匹配1次或者多次 x 字符. ## x{n,m} 匹配 x 字符,至少 n 次,至多 m 次. ## (a|b|c) 要么匹配

  • Java 处理高并发负载类优化方法案例详解

    java处理高并发高负载类网站中数据库的设计方法(java教程,java处理大量数据,java高负载数据) 一:高并发高负载类网站关注点之数据库 没错,首先是数据库,这是大多数应用所面临的首个SPOF.尤其是Web2.0的应用,数据库的响应是首先要解决的. 一般来说MySQL是最常用的,可能最初是一个mysql主机,当数据增加到100万以上,那么,MySQL的效能急剧下降.常用的优化措施是M-S(主-从)方式进行同步复制,将查询和操作和分别在不同的服务器上进行操作.我推荐的是M-M-Slaves

随机推荐