4.熟悉Java基本类库系列——Java 正则表达式类库
正则表达式语法结构图:
Java正则表达式类库结构图:
Java典型例子
1、String类 matches()方法
判断字符串是否符合特定正则表达式
@Test public void testRegex(){ String regex = ".*\\d{3}.*"; String str1 = "11tec34"; String str2 = "285dffd"; String str3 = "bac7736db"; //输出:false, true, true System.out.println(str1.matches(regex) + "," + str2.matches(regex) + "," + str3.matches(regex)); }
2、String类 split()方法
用正则表达式分割字符串
@Test public void testRegex2(){ String input = "hello3world8my9name1is5jacket"; String regex = "\\d"; //以数字作为分隔符 String strs[] = input.split(regex); //输出:hello world my name is jacket for(String str : strs){ System.out.print(str + " "); } System.out.println(); input = "hellodogworlddogmydognamedogisdogjacket"; regex = "dog"; //以"dog"字符作为分隔符 strs = input.split(regex); //输出:hello world my name is jacket for(String str : strs){ System.out.print(str + " "); } }
3、String类 replace()方法
用正则表达式替换字符
@Test public void testRegex3(){ String input = "hello3world8my9name1is5jacket"; String regex = "\\d"; //以数字作为分隔符 String firstStr = input.replaceFirst(regex, ":"); //只替换第一个匹配的字符 String allStr = input.replaceAll(regex, ":"); //替换所有匹配的字符 //输出: //hello:world8my9name1is5jacket //hello:world:my:name:is:jacket System.out.println(firstStr); System.out.println(allStr); }
4、Pattern.matches() 静态方法
判断字符串是否符合正则表达式,等同于String类的matches()方法
@Test public void testRegex4(){ String regex1 = "\\bdog\\b"; String regex2 = ".*\\bdog\\b.*"; String input = "dog dog dog doggie dogg"; //输出:false,true System.out.println(Pattern.matches(regex1, input) + "," + Pattern.matches(regex2, input)); }
5、Pattern类 split()方法
根据正则表达式分割字符串,等同于String类的split()方法
//6.split() 分割字符串 -> 等同于String的split()方法 @Test public void testRegex6(){ String regex = "\\d"; String input = "hello3world5hello8java"; Pattern p = Pattern.compile(regex); String strs[] = p.split(input); //输出:hello world hello java for(String str : strs){ System.out.print(str + " "); } }
6、Pattern.quote() 静态方法
获取匹配此字符串的正则表达式
@Test public void testRegex6(){ //例子1 String input = "."; String regex = Pattern.quote(input); boolean flag = Pattern.matches(regex, input); //输出:\Q353434\E true System.out.println(regex); System.out.println(flag); //例子2 input = "test.test"; String errorOutput = input.replaceAll(".", "/"); //输出:///////// System.out.println(errorOutput); //例子3 String correctOutput = input.replaceAll(Pattern.quote("."), "/"); //输出:test/test System.out.println(correctOutput); }
7、Matcher类 find()方法,start()方法,end()方法
@Test public void testRegex7(){ //m.start() m.end() String regex = "\\bdog\\b"; String input = "dog dog dog doggie dogg"; Pattern p = Pattern.compile(regex); Matcher m = p.matcher(input); // 获得匹配器对象 int count = 0; while (m.find()) { count++; //Match number 1,start(): 0,end(): 3 //Match number 2,start(): 4,end(): 7 //Match number 3,start(): 8,end(): 11 System.out.print("Match number " + count); System.out.print(",start(): " + m.start()); System.out.println(",end(): " + m.end()); } }
8、Matcher类 find(int index)方法,start(int index),end(int index)
@Test public void testRegex8(){ //m.start() m.end() String regex = "\\bdog\\b"; String input = "dog dog dog doggie dogg"; Pattern p = Pattern.compile(regex); Matcher m = p.matcher(input); // 获得匹配器对象 //m.find(int start) //输出:start(): 0,end(): 3 //start(): 4,end(): 7 m.find(0); //从要匹配的字符串的第几个字符开始寻找 System.out.print("start(): " + m.start()); System.out.println("end(): " + m.end()); m.find(); System.out.print("start(): " + m.start()); System.out.println("end(): " + m.end()); //m.find(int start) //输出:start(): 4,end(): 7 //start(): 8,end(): 11 m.find(4); System.out.print("start(): " + m.start()); System.out.println("end(): " + m.end()); m.find(); System.out.print("start(): " + m.start()); System.out.println("end(): " + m.end()); //m.start(int group) m.end(int group) m.find(0); // int firstStartGroupIndex = m.start(0); System.out.println(firstStartGroupIndex); }
9、Matcher类 lookingAt()方法,matches()方法
判断字符串是否匹配特定的正则表达式,lookingAt()方法不要求全部匹配,而matches()方法要求全部匹配
@Test public void testRegex9(){ String regex = "foo"; String str = "fooooooooooooooooo"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(str); System.out.println("Current regex is: " + regex); System.out.println("Current str is: " + str); System.out.println("lookingAt(): " + matcher.lookingAt()); //true System.out.println("matches(): " + matcher.matches()); //false,因为matches要求全部匹配 }
此外还有其他的Matcher类的方法未整理,
//还有Matcher类的其他方法未整理:
//1.group(int group)方法
//2.appendReplacement() / appendTail() / replaceAll() / replaceFirst() / quoteReplacement()
//99.Matcher类的find()方法,start()方法,end()方法
更多详细的正则表达式博文可以参考:
微软官方文档:https://msdn.microsoft.com/zh-cn/library/ae5bf541(v=vs.80).aspx
一个很好的正则表达式教程:http://www.java3z.com/cwbwebhome/article/article8/Regex/Java.Regex.Tutorial.html#reg7
4.熟悉Java基本类库系列——Java 正则表达式类库的更多相关文章
- Java面试题系列 ----- Java基础面试题(91道)
更多详情点击查看,点这里!这里!!这里!!! 文末获取所有面试PDF文档! Java概述 1. 何为编程 编程就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程. 为了 ...
- 2.熟悉Java基本类库系列——Java IO 类库
Java中常用的IO操作基本上可以分为四大部分,分别是:File类操作.RandomAccessFile类操作.字节流操作.字符流操作.只要熟练掌握了本文中所列举的所有例子,基本上对于Java的IO流 ...
- 1.熟悉Java基本类库系列 - 目录
写这个系列是想让自己多熟悉熟悉Java的基本类库,忘记的时候可以在这里看看之前写过的例子,这样就可以很快的回忆起来如何使用了. 这样就可以很节省时间了. ======= 下面是传送门啦 ======= ...
- java高并发系列 - 第14天:JUC中的LockSupport工具类,必备技能
这是java高并发系列第14篇文章. 本文主要内容: 讲解3种让线程等待和唤醒的方法,每种方法配合具体的示例 介绍LockSupport主要用法 对比3种方式,了解他们之间的区别 LockSuppor ...
- java高并发系列 - 第17天:JUC中的循环栅栏CyclicBarrier常见的6种使用场景及代码示例
这是java高并发系列第17篇. 本文主要内容: 介绍CyclicBarrier 6个示例介绍CyclicBarrier的使用 对比CyclicBarrier和CountDownLatch Cycli ...
- java高并发系列 - 第13天:JUC中的Condition对象
本文目标: synchronized中实现线程等待和唤醒 Condition简介及常用方法介绍及相关示例 使用Condition实现生产者消费者 使用Condition实现同步阻塞队列 Object对 ...
- java高并发系列 - 第2天:并发级别
由于临界区的存在,多线程之间的并发必须受到控制.根据控制并发的策略,我们可以把并发的级别分为阻塞.无饥饿.无障碍.无锁.无等待几种. 阻塞 一个线程是阻塞的,那么在其他线程释放资源之前,当前线程无法继 ...
- java基础解析系列(三)---HashMap
java基础解析系列(三)---HashMap java基础解析系列 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析系列(二)-- ...
- java高并发系列-第1天:必须知道的几个概念
java高并发系列-第1天:必须知道的几个概念 同步(Synchronous)和异步(Asynchronous) 同步和异步通常来形容一次方法调用,同步方法调用一旦开始,调用者必须等到方法调用返回后, ...
随机推荐
- Tesseract pytesseract的安装和使用
Tesseract是开源的OCR引擎,可以识别的图片里的文字,支持unicode(UTF-8)编码,100多种语言,需要下载相应语言的训练数据. 安装: 有两种方法,一种是通过编译源码,比较麻烦.我使 ...
- iOS 推送问题全解答《十万个为啥吖?》
Q 1:为啥收不到推送(1)? 如果收到推送时,App 在前台运行,那么: iOS 10 before 顶部横幅不会弹出.没有任何展示,你以为「没有收到推送」. iOS 10 after 如果没有实现 ...
- Java表达式中的那些坑
[1]您确定真正了解后缀表达式与前缀表达式的区别吗? public class IncrementDemo{ public static void main(String[] args) { int ...
- MySQL C#教程
这是关于MySQL数据库的C#教程,包含了对MySQL数据库基本操作: 数据库访问组件MySql Connect/NET MySql Connect/NET是MySQL官方提供给C#的接口,封装的非常 ...
- java 线程中断机制
上一篇文章我们了解过了java有关线程的基本概念,有线程的属性,线程可能处于的状态,还有线程的两种创建的方式,最后还说了一个关键字synchronized,解决了高并发导致数据内容不一致问题,本篇文章 ...
- Python学习路线图
文章转载自「开发者圆桌」一个关于开发者入门.进阶.踩坑的微信公众号 Python学习路线图你可以通过百度云盘下载观看对应的视频 链接: http://pan.baidu.com/s/1c2zLllA ...
- 关于JavaScript简单描述
1.什么是JavaScript? JavaScript 是一种专门用于与网页交互而设计的脚本语言,它有三部分组成,那是哪三部分呢?分别是ECMAScript(提供核心语言功能),DOM(提供访问和操作 ...
- node删除当前文件底下全部文件的正确姿势
今天在项目上犯了一个很愚蠢的错误 执行如下,结果删除掉了项目根目录底下的所有配置文件,导致本地虚拟机挂掉,这次多一个/的给我教训真是莫大的...哎 正确的姿势为:
- React 入门之路(1)
React React简介 是由Facebook公司推广的一套框架,已经应用instagram等产品 React就是为了提供应用程序性能而设计的一套框架 在angular中,对dom提供了一些指令,让 ...
- 使用RecyclerView实现的分组列表。
项目介绍: StickyHeaders使用RecyclerView实现的分组列表