java正则表达式 工具类_java正则表达式工具类详解

2023-11-13

主要功能有:

boolean find() 是否能匹配到至少一个

boolean match() 匹配整个字符串//这个方法其实可以用^$做到

int size() 匹配的字符串个数

String[] getAll() 获取所有匹配到的字符串

String get(int index) 获取匹配到的第N个字符串

String replaceAll(String replacement) 替换所有匹配到的字符串

String replaceFirst(String replacement) 替换第一个匹配到的字符串

String replaceTail(String replacement) 替换最后一个匹配到的字符串

String replace(int index,String replacement) 替换第N个匹配到的字符串

(常用的功能应该就这些了吧)

demo输出结果:

find-->true

size-->4

------下面是get相关------

请不要开玩笑

all-->null

all-->abc

all-->adc

all-->aac

all-->acc

并没有匹配到辣么多

all-->null

------下面是replace相关------

替换所有:诶嘿嘿 诶嘿嘿 诶嘿嘿 诶嘿嘿 abbc

替换第一个:诶嘿嘿 adc aac acc abbc

替换最后一个:abc adc aac 诶嘿嘿 abbc

替换第2个:abc 诶嘿嘿 aac acc abbc

替换第3个:abc adc 诶嘿嘿 acc abbc

替换第10个(并没有10个):abc adc aac acc abbc

------下面是匹配整个字符串------

验证手机号18202020202:true

验证手机号1320202020:false

验证手机号20202020202:false

验证邮箱[email protected]:true

验证邮箱[email protected]:true

验证邮箱www.baidu.com:false

测试类:

public class Test {

public static void main(String[] arg){

String res = "abc adc aac acc abbc";

String pattern = "a\\wc";

//String pattern = "awc";

//简单用法的示范

int size = ZZUtil.init(res, pattern).size();

boolean find = ZZUtil.init(res, pattern).find();

System.out.println("find-->"+find);

System.out.println("size-->"+size);

//获取匹配到的字符串

System.out.println("------下面是get相关------");

ZZUtil zz = ZZUtil.init(res, pattern);

System.out.println("all-->"+zz.get(-1));

System.out.println("all-->"+zz.get(0));

System.out.println("all-->"+zz.get(1));

System.out.println("all-->"+zz.get(2));

System.out.println("all-->"+zz.get(3));

System.out.println("all-->"+zz.get(4));

//替换字符串

System.out.println("------下面是replace相关------");

String replacement = "诶嘿嘿";

System.out.println("替换所有:"+zz.replaceAll(replacement));

System.out.println("替换第一个:"+zz.replaceFirst(replacement));

System.out.println("替换最后一个:"+zz.replaceTail(replacement));

System.out.println("替换第2个:"+zz.replace(1, replacement));

System.out.println("替换第3个:"+zz.replace(2, replacement));

System.out.println("替换第10个(并没有10个):"+zz.replace(9, replacement));

//实用功能

System.out.println("------下面是匹配整个字符串------");

String p = "1\\d{10}";//验证手机号

String e = "[email protected]\\w+.com";//验证邮箱

System.out.println("验证手机号18202020202:"+ZZUtil.init("18202020202", p).match());

System.out.println("验证手机号1320202020:"+ZZUtil.init("1820202020", p).match());

System.out.println("验证手机号20202020202:"+ZZUtil.init("20202020202", p).match());

System.out.println("验证邮箱[email protected]:"+ZZUtil.init("[email protected]", e).match());

System.out.println("验证邮箱[email protected]:"+ZZUtil.init("[email protected]", e).match());

System.out.println("验证邮箱www.baidu.com:"+ZZUtil.init("www.baidu.com", e).match());

}

}

正则表达式工具类

import java.util.regex.Matcher;

import java.util.regex.Pattern;

/**

* 正则表达式工具类

* @author lu

*

*/

public class ZZUtil {

private static ZZUtil zz;

public static ZZUtil init(CharSequence res,String pattern){

if (zz==null||(!res.equals(zz.res)||!pattern.equals(zz.pattern))) {

//在没有实例或内容不同的时候新建一个实例

zz = new ZZUtil(res, pattern);

}

return zz;

}

private CharSequence res;

private String pattern;

private Pattern p;

private Matcher m;

private int size = 0;

private String[] list;//所有匹配到的字符串

private ZZUtil(CharSequence res,String pattern){

this.res = res;

this.pattern = pattern;

p = Pattern.compile(pattern);

m = p.matcher(res);

while(m.find()){

size++;

}

list = new String[size];

m.reset();

for (int i = 0; i < size; i++) {

if(m.find())list[i] = m.group();

}

}

/**是否能匹配到至少一个*/

public boolean find(){

return size>0;

}

/**匹配整个字符串,必须整个字符串满足正则表达式才算true*/

public boolean match(){

return find()&&get(0).equals(res);

}

/**获取所有匹配的字符串个数*/

public int size(){

return size;

}

/**获取所有匹配到的字符串*/

public String[] getAll(){

return list;

}

/**获取匹配到的第N个字符串*/

public String get(int index){

if (index<0) {

System.out.println("请不要开玩笑");

return null;

}

if (index>=size) {

System.out.println("并没有匹配到辣么多");

return null;

}

return list[index];

}

/**替换所有匹配到的字符串*/

public String replaceAll(String replacement){

return m.replaceAll(replacement);

}

/**替换第一个匹配到的字符串*/

public String replaceFirst(String replacement){

return m.replaceFirst(replacement);

}

/**替换最后一个匹配到的字符串*/

public String replaceTail(String replacement){

return replace(size-1, replacement);

}

/**替换第N个匹配到的字符串*/

public String replace(int index,String replacement){

m.reset();

boolean isFind = false;

while(index>=0){

isFind = m.find();

index--;

}

if(isFind){

StringBuffer sb = new StringBuffer();

m.appendReplacement(sb, replacement);

m.appendTail(sb);

return sb.toString();

}

return (String) res;

}

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java正则表达式 工具类_java正则表达式工具类详解 的相关文章

  • APIPOST入门+认识接口(前后端分离)

    APIPOST入门 认识接口 前后端分离 文章目录 APIPOST入门 认识接口 前后端分离 啥是 API 接口 笑话小案例 编写mock数据 如何解决跨域问题 后续要解决的 实战二维码 驾照题库实战项目 自己写一个接口 2 post和ge
  • 6:sort_values,loc,corr数据筛选,绘图

    一 使用sort values 对某一列 进行从小到大或者从大到小的排序 1 对一列进行操作 import pandas as pd df pd read excel r C Users 73575 Desktop 北京新发地菜价 xlsx
  • 整型的提升和截断详解(看完包会)

    所有常量值 在没有后缀得情况下 默认是4个字节 int型 将一个int型值赋给char型变量时 会发生整形截断 按存储顺序截断 先到先截 一个char截断一个字节即8个bit位 将char类型值按有常量值 在没有后缀得情况下 默认是4个字节
  • linux常用库 对应函数

    1 include
  • Vue在线引入地址

    Vue在线引入地址 vue2 vue3 CodePan在线运行ElementUI时添加的JS及CSS引用地址 Vue https cdn jsdelivr net npm vue 2 dist vue
  • 【Flink系列1】flink与spark的区别

    Flink简介 spark基本架构 flink基本架构 Spark提出的最主要抽象概念是弹性分布式数据集 RDD flink支持增量迭代计算 基于流执行引擎 Flink提供了诸多更高抽象层的API以方便用户编写分布式任务 1 DataSet
  • RabbitMQ镜像集群搭建

    RabbitMQ镜像集群搭建 消息队列 在消息的传输过程中保存消息的容器 MQ角色 Broker 即消息队列服务器实体 Exchange 消息交换机 它指定消息按什么规则 路由到哪个队列 Queue 消息队列载体 每个消息都会被投入到一个或
  • 基于SpringBoot并整合MyBatis和Thymeleaf模板引擎开发的图书管理系统

    先展示下前端页面 登录页面 用户注册页面 一 管理员相关页面以及功能 管理员主页信息以及左侧导航栏 页头可查看当前管理员的信息
  • Unity Application.LoadLevel() 已过时

    解决办法 使用EditorSceneManager方法 https blog csdn net shenqiankk article details 100137502
  • 大数据技术——Scala语言基础

    Scala基础知识 控制结构 if条件表达式 有一点与Java不同的是 Scala中的if表达式的值可以赋值给变量 while循环 for循环 基本语法 其中 变量 lt 表达式 被称为 生成器 generator 守卫 guard 的表达
  • finereport连接oracle_FINEREPORT连接远程ORACLE数据库

    有如下错误提示 SEVERE CannotcreatePoolableConnectionFactory Listenerrefusedtheconnectionwiththefollowingerror ORA 12505 TNS lis
  • python小技巧大应用--基础实用漂亮界面(无边框,圆角,可拖拽)

    这回要实现一个漂亮的基础界面 要具有如下特色 无边框 圆角 漂亮的背景 可拖拽移动 具有最小化 关闭按钮 界面与代码分离 支持qss 先展示一下最后的效果 那就开始工作吧 1 通过Qt Designer实现界面设计 将设计好的界面保存为di
  • 【数据结构】设计循环队列详解

    我的个人主页 我们登上并非我们所选择的舞台 演出并非我们所选择的剧本 Enchiridion 设计循环队列 前言 1 什么是循环队列 2 循环队列的设计 2 1 MyCircularQueue k 实现 2 2 isEmpty 和 isFu
  • usb 命名乱的一批,怎么破

    USB 的命名真是乱的一批 命名里 一股浓浓的 印度风扑面而来 我想给 iso 文件加个驱动直接跪了 被绕进去了 幸运的是速度没乱 以下用速度整理该文档 USB2 0 时代 12 mbps usb1 0 480 mbps usb2 0 US
  • 什么是Restful?

    REST 简介 REST 是英文 Representational State Transfer 的缩写 有中文翻译为 具象状态传输 REST 这个术语是由 Roy Fielding 在他的博士论文 Architectural Styles
  • 大数据课程最后任务-hive处理数据

    好的这是第五次也就是不加额外挑战任务的最后任务 基本过程来自于厦门大学的hive教程 主要是hive处理20w的数据 两部分 一部分是安装 来自http dblab xmu edu cn blog 959 一步分是运行http dblab
  • Yii Framework 开发教程(34) Zii组件-AutoComplete示例

    CJuiAutoComplete 在用户输入时可以根据用户输入的前几个字符自动提示用户可以输入的文字 它封装了 JUI autocomplete插件 基本用法如下 php view plain copy print
  • vue3优雅实现移动端登录注册模块

    前言 近期开发的移动端项目直接上了vue3 新特性composition api确实带来了全新的开发体验 开发者在使用这些特性时可以将高耦合的状态和方法放在一起统一管理 并能视具体情况将高度复用的逻辑代码单独封装起来 这对提升整体代码架构的
  • VUE element-ui 之table表格表头插入输入框

    很简单

随机推荐

  • 手把手教你安装RabbitMQ(基于CentOS7系统)

    RabbitMQ简介及安装 什么是RabbitMQ RabbitMQ的特点 安装 安装Erlang 配置Erlang环境变量 验证环境 安装RabbitMQ 启动RabbitMQ 添加用户 访问 什么是RabbitMQ RabbitMQ是一
  • 财富自由?五年后为什么他月入十万,而我月入六千

    最近无论是在社群里还是 各种付费平台上 都能看到闪闪发光的一个词 财富自由 我好奇地去搜索了一下百度百科 财富自由是指 你无需为生活开销而努力 为钱工作的状态 简单的说 你的资产产生的被动收入 至少等于或超过你的日常开支 这是我们大多数人最
  • int、float和double的字节及位码

    int类型 4字节32位 第一位 符号位 2 9位 阶位 指数位 10 32位 普通数值位 0 00000000 00000000000000000000001 flaot类型 4字节32位 第一位 符号位 2 9位 阶位 指数位 10 3
  • 神经网络优化(二) - 激活函数和损失函数

    1 神经网络中的激活函数activation function 1 1 引入激活函数概念 神经网络的基本构成单元是神经元 在搭建神经网络一文中使用的神经元模型为 这个神经元模型是较为简化的基本神经元模型 还有一种理论模型包含有激活函数和偏置
  • live555学习之二RTSP协议说明

    RTSP协议 是一种基于C S架构的并用于双方通信约定的流媒体协议 全称实时流协议 Real Time Streaming Protocol 集成了网络实时控制 数据传输接收功能 客户端遵循协议发送指令控制多媒体的资源的功能如播放 暂停 停
  • row format delimited fields terminated by ','

    row format delimited fields terminated by 以 结尾的行格式分隔字段
  • base64图片编码大小与原图文件大小之间的联系

    base64图片编码大小与原图文件大小之间的联系 有时候我们需要把canvas画布的图画转换成图片输出页面 而用canvas生成的图片就是base64编码的 它是由数字 字母等一大串的字符组成的 但是我们需要获取它的文件流大小该怎么办呢 B
  • 题解-equation 8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6 == Y;

    Problem Description Now given the equation 8 x 4 7 x 3 2 x 2 3 x 6 Y can you find its solution between 0 and 100 br Now
  • Docker 容器安全风险和防御综述

    摘要 Docker是目前最具代表性的容器平台之一 它的安全问题引起了产业界和学术界的广泛关注 首先 对Docker架构以及基本安全特性进行介绍 分析了Docker面临的安全威胁 其次 对Docker增强 安全检测 瘦身等方面的安全技术进行了
  • JSONArray操作汇总,排序,筛选,分组

    JSONArray操作汇总 一 排序 1 根据集合对象中某一对象属性进行排序 返回新的集合 2 List进行排序 返回新的List 注意 并没有改变原始list的顺序 二 筛选 1 获取集合对象中某一属性值 2 获取集合对象中某一属性值并去
  • JavaWeb基础7——会话技术Cookie&Session

    导航 黑马Java笔记 踩坑汇总 JavaSE JavaWeb SSM SpringBoot 瑞吉外卖 SpringCloud SpringCloudAlibaba 黑马旅游 谷粒商城 目录 一 会话技术 1 1 会话和跟踪技术介绍 1 2
  • 【华为OD机试 2023】 查找单入口空闲区域(C++ Java JavaScript Python)

    华为od机试题库 华为OD机试2022 2023 C Java JS Py https blog csdn net banxia frontend category 12225173 html 华为OD机试2023最新题库 更新中 C Ja
  • npm安装依赖至指定版本的方法

    简介 本文介绍npm安装依赖至指定版本的方法 依赖的版本可以在淘宝镜像或官方查询到 三种方法 方法一 先在package json里修改好指定版本号 然后输入 npm update webpack 方法二 npm update webpac
  • 【从推理出发】

    赌上爷爷之名 2021年暑假 和现在一样 也是很佛 不想好好学习的时间 8月的天气太过炎热 有时却又暴雨倾盆 很不讨喜 只得在家闲着看电视 动漫打发时间 按照以前的习惯 一般是悠闲地躺在沙发上吹着空调 看着长达900多集的柯南 然后在剧情中
  • spring cloud gateway 自定义负载均衡

    spring cloud gateway 自定义负载均衡 相关类及接口 LoadbalancerClientFilter 使用ribbon负载均衡 默认使用该类 已不推荐使用 deprecated Deprecated public cla
  • 伙计,Go项目怎么使用枚举?

    前言 哈喽 大家好 我是asong 枚举是一种很重要的数据类型 在java C语言等主流编程语言中都支持了枚举类型 但是在Go语言中却没有枚举类型 那有什么替代方案吗 本文我们来聊一聊这个事情 为什么要有枚举 我们以java语言为例子 在J
  • R语言实现可理解的随机森林模型(Random Forest)——iml包

    Random Forest 解释模型 1 介绍 2 理解随机森林运行机理 2 1导入需要的包 2 2 构建随机森林模型 2 3 RF特征重要性 2 4 特征对预测结果的影响 2 5 交互作用 2 6 替代模型 Decision tree s
  • 微信小程序View视图容器组件

    完整微信小程序 Java后端 技术贴目录清单页面 必看 微信小程序框架为开发者提供了一系列完备的UI组件 方便开发者快速构建小程序UI界面 借助这些UI组件开发者可以像搭积木一样快速地拼装出一栋房子的样子 这非常类似于当下建筑行业比较流行的
  • 华为ERP思考:国产自研迈出第一步

    华为的进入会刺激用友 金蝶 浪潮等国产厂商加快技术革新 以及伴随着华为自身技术自研全栈的布局和不断测试 国产ERP的兼容性和标准性都将上一个新的台阶 作者 斗斗 编辑 皮爷 出品 产业家 15小时完成全球88家子公司Meta ERP系统的切
  • java正则表达式 工具类_java正则表达式工具类详解

    主要功能有 boolean find 是否能匹配到至少一个 boolean match 匹配整个字符串 这个方法其实可以用 做到 int size 匹配的字符串个数 String getAll 获取所有匹配到的字符串 String get