JAVA学习笔记之正则表达式

时间:2023-02-26 12:50:31

正则表达式(regular expression)描述的是一种字符串匹配的模式,使字符串更易于操作。但其弊端就是使代码的阅读性降低。
专门用于对字符串的操作包括:
1、匹配
String类中提供了匹配的方法matches()
boolean matches(String regex) —->告知此字符串是否匹配给定的正则表达式。
2、切割
String类中提供了切割的方法
String[] split(String regex) —->根据匹配给定的正则表达式来拆分此字符串。
例如:

public class RegexDemo {
public static void main(String[] args) {
String str="123 48 489 330";
String[] s = str.split(" +");//规则:以空格符为分隔符,输出分隔符之间的内容,X+指的是一次或多次出现的符号
for(String sps:s){
System.out.println(sps);
}
}
}

输出
123
48
489
330
3、替换
String replaceAll(String regex, String replacement) —->使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
例如:需求是将输入的手机号中间四位输出为*

public class RegexDemo {
public static void main(String[] args) {
String temp="15100004567";
String str=temp.replaceAll("(\\d{3})(\\d{4})(\\d{4})","$1****$3" );
//1、(A)将括号内内容作为一个组,后面直接引用。
//2、X{n}+表示X出现恰好 n 次。
//3、如果有两个字符串,后面的字符串取前一个字符串的组时,要用$符号,$1表示取第一个组,也就是前三个数字,$3表示取第三个组,也就是最后四个数字
System.out.println(str);
}
}

输出为151****4567。
练习:需要将输入的字符串中两个以上出现的字符替换为空白符

public class RegexDemo {
public static void main(String[] args) {
String temp1="ad$$ddugj7777do8dk%%%dfg";
String str1=temp1.replaceAll("(.)\\1+"," " );//(.)意思就是将出现的任意字符封装成一个组,\\1+的意思是前面出现的组要出现1次以上。综上,匹配出来的就是一个多次出现的字符组合
System.out.println(str1);
}
}
输出:ad  ugj do8dk dfg

4、获取
实现获取:将符合规则的内容取出来
用到正则表达式对象(java.util.regex)
1、将字符串规则封装成Pattern对象。compile(regex)方法
2、通过正则对象获取匹配器对象,用到将正则规则作用到要操作的字符串上
3、通过匹配器对象的方法,对字符串进行操作
示例:

 Pattern p = Pattern.compile("a*b");//将规则编译成对象
Matcher m = p.matcher("aaaaab");//和要操作的字符串关联,生成匹配器对象
boolean b = m.matches();//使用匹配对象方法对字符串操作

练习:需求是取出字符串中由三个字母组成的单词“abc hd haha zsy shi hdu le hyssd”

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexGet {
public static void main(String[] args) {
String temp = "abc hd haha zsy shi hdu le hyssd";
String regex="\\b[a-zA-Z]{3}\\b";//\b是指单词的边界,该规则的意思是寻找单词字母个数为3的 ;如果只是单纯得将规则定为[a-zA-Z]{3},输出就会出现错误,例如出现hah这样的结果。
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(temp);
while(m.find()){ //find()方法是判断有无匹配到的字符串,返回值为boollean,该循环与迭代器类似
String g = m.group();//group()方法是抓取匹配到的字符串
System.out.println(g);
}
}
}

输出为
abc
zsy
shi
hdu