java之学习正则表达式的分组功能及案例

结果示意图

正则表达式的分组功能

正则表达式的分组功能 * 捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C))) 中,存在四个这样的组: 1 ((A)(B(C))) 2 (A 3 (B(C)) 4 (C)

组零始终代表整个表达式。 B:案例演示 a:切割 需求:请按照叠词切割: “feqqqnxggggggianssssgbe”; b:替换 需求:我我….我…我.要…要要…要学….学学..学.编..编编.编.程.程.程..程 将字符串还原成:“我要学编程”。

案例代码

package com.ifenx8.regex;

public class Demo7_Regex {

	/**
	 * * A:正则表达式的分组功能
			* 捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C))) 中,存在四个这样的组: 
		* 
				1     ((A)(B(C))) 
				2     (A 
				3     (B(C)) 
				4     (C) 
			
				组零始终代表整个表达式。
		B:案例演示
			a:切割
				需求:请按照叠词切割: "feqqqnxggggggianssssgbe";
			b:替换
				需求:我我....我...我.要...要要...要学....学学..学.编..编编.编.程.程.程..程
				将字符串还原成:“我要学编程”。
	 */
	public static void main(String[] args) {
		demo1();
		demo2();
		//叠词练习如:aabb 高高兴兴  欢欢乐乐
		String s = "高高兴兴";
		String regex = "(.)\\1(.)\\2";//表示第一组出现一次第二组出现一次
		System.out.println(s.matches(regex));
		//练习 abab 如 高兴高兴  学习学习
		String s2 = "高兴高兴";
		String regex2 = "(..)\\1";//表示第一组有两个字符,这一组出现一次
		System.out.println(s2.matches(regex2));
	}

	public static void demo2() {
		/*b:替换
		需求:我我....我...我.要...要要...要学....学学..学.编..编编.编.程.程.程..程
		将字符串还原成:“我要学编程”
		分析:
		1、首先去掉“.”,用空字符串替换“.”字符
		2、去掉叠词重复的
		*/
		String s = "我我....我...我.要...要要...要学....学学..学.编..编编.编.程.程.程..程";
		String regex = "\\.+";//设置正则表达式,表示一个或多个“.”;这一步可以和下一步合并,如:String s2 = s.replaceAll("\\.+", "");
		String s2 = s.replaceAll(regex, "");//用空字符串替换正则表达式
		System.out.println(s2);
		System.out.println("===========");
		String s3 = s2.replaceAll("(.)\\1+", "$1");
		System.out.println(s3);
	}
	
	public static void demo1() {
		/*a:切割
		需求:请按照叠词切割: "feqqqnxggggggianssssgbe";*/
		String s = "feqqqnxggggggianssssgbe";//通过正则的分组功能把字符串重叠的位置切割开
		String regex = "(.)\\1+";//表示第一组出现一次到多次
		String[] arr = s.split(regex);//将切割后的字符串存入string数组
		for (int i = 0; i < arr.length; i++) {//遍历数组
			System.out.print(arr[i]);
		}
		System.out.println();
		System.out.println("===========");
	}

}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Hongten

一看就懂的快速排序方法_java版

=================================================

2.4K20
来自专栏伪君子的梦呓

题解 ~ 输出三个数中的最大值 ~ C++ 做法

25950
来自专栏Golang语言社区

map按key和按value排序

看一个题: 查找和排序 题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩 都按先录入排列在前的规则处理。 例示: jack 70...

59080
来自专栏计算机视觉与深度学习基础

Leetcode 29 Divide Two Integers 位操作的巧妙运用

Divide two integers without using multiplication, division and mod operator. I...

27460
来自专栏Golang语言社区

Go语言 -浮点数

Go提供了两种size的浮点数,float32和float64。它们的算术规范是由IEEE754国际标准定义,现代CPU都实现了这个规范。 浮点数能够表示的范...

41140
来自专栏猿人谷

三十分钟掌握STL

这是本小人书。原名是《using stl》,不知道是谁写的。不过我倒觉得很有趣,所以化了两个晚上把它翻译出来。我没有对翻译出来的内容校验过。如果你没法在三十分钟...

27880
来自专栏海天一树

NOIP 2013初赛普及组C/C++答案详解

试题和答案: https://wenku.baidu.com/view/aa2bc10b5022aaea988f0f77.html?re=view

18740
来自专栏游戏开发那些事

三十分钟掌握STL

这是本小人书。原名是《using stl》,不知道是谁写的。不过我倒觉得很有趣,所以化了两个晚上把它翻译出来。我没有对翻译出来的内容校验过。如果你没法在三十分钟...

13640
来自专栏数据结构与算法

洛谷P1941 飞扬的小鸟(背包 dp)

很显然的dp,设\(f[i][j]\)表示第\(i\)个位置,高度为\(j\)的最小步数

14430
来自专栏Golang语言社区

map按key和按value排序

看一个题: 查找和排序 题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩 都按先录入排列在前的规则处理。 例示: jack 70...

39830

扫码关注云+社区

领取腾讯云代金券