这是我参与2022首次更文挑战的第12天,活动详情查看:2022首次更文挑战
Java程序设计 正则表达式快速入门
利用正则表达式可以执行更加复杂的字符串的拆分、验证、替换等操作
不使用正则表达式验证字符串
public class Hello {
public static void main(String[] args) {
String s="123a";
boolean flag = true;
//将字符串转换为字符数组
char c[] = s.toCharArray();
for(int i=0;i<c.length;i++) {
if (c[i] < '0' || c[i] > '9') {
flag = false;
break;
}
}
if(flag){
System.out.println("字符串由数字构成");
}else {
System.out.println("字符串不是由数字构成");
}
}
}
使用正则表达式验证字符串
import java.util.regex.Pattern;
public class Hello {
public static void main(String[] args) {
String s="123456";
if(Pattern.compile("[0-9]+").matcher(s).matches()){
System.out.println("字符串由数字构成");
}else {
System.out.println("字符串不是由数字构成");
}
}
}
“[0-9]+”是正则表达式的匹配字符,表示由1个以上的数字组成
正则表达式操作类需要通过Pattern和Matcher两个类完成操作的
Pattern类的主要作用是进行正则规范
Matcher类主要是执行规范,验证一个字符串是否符合其规范
规范 | 作用 |
---|---|
\\ | 表示反斜线(\ )字符 |
\t | 表示制表符 |
\n | 表示换行 |
[abc] | 字符a、b、c |
[^abc] | 除了a、b、c之外的任意字符 |
[a-zA-Z0-9] | 表示由字母、数字组成 |
\d | 表示数字 |
\D | 表示非数字 |
\w | 表示字母、数字、下划线 |
\W | 表示非字母、数字、下划线 |
\s | 表示所有空白字符 |
\S | 表示所有非空白字符 |
^ | 行的开头 |
$ | 行的结尾 |
_ | 匹配除换行符之外的任意字符 |
数量
规范 | 作用 |
---|---|
X | 必须出现一次 |
X? | 可以出现0次、1次 |
X* | 可以出现0次、1次、多次 |
X+ | 可以出现1次、多次 |
X{n} | 必须出现n次 |
X{n.} | 必须出现n次以上 |
X{n,m} | 必须出现n-m次 |
逻辑运算符
规范 | 作用 |
---|---|
XY | X规范后跟着Y规范 |
X|Y | X规范或Y规范 |
(X) | 作为一个捕获组规范 |
Pattern类的常用方法
方法 | 作用 |
---|---|
public static Pattern compile(String regex) | 指定正则表达式规则 |
public Matcher matcher(CharSequence input) | 返回Matcher类实例 |
public String[] split(CharSequence input) | 字符串拆分 |
Matcher类的常用方法
方法 | 作用 |
---|---|
public boolean matches() | 执行验证 |
public String replaceAll(String replacement) | 字符串替换 |
验证日期
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Hello {
public static void main(String[] args) {
String s="2023年01月23日";
if(Pattern.compile("\\d{4}年\\d{2}月\\d{2}日").matcher(s).matches()){
System.out.println("是日期");
}else {
System.out.println("不是日期");
}
// 方式二
Pattern p = Pattern.compile("\\d{4}年\\d{2}月\\d{2}日");
Matcher m = p.matcher(s);
if(m.matches()){
System.out.println("是日期");
}else {
System.out.println("不是日期");
}
}
}
使用正则表达式规则替换字符
除了数字其他全部替换成+
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Hello {
public static void main(String[] args) {
String s ="ghj45fghj5g2t66h2g5g5h55fg8f7g7";
Pattern p = Pattern.compile("\\D+");
Matcher m = p.matcher(s);
String a = m.replaceAll("+");
System.out.println(a);
}
}
String类的正则支持方法
方法 | 作用 |
---|---|
public boolean matches(String regex) | 字符串匹配 |
public String replaceAll(String regex,String replacement) | 字符串替换 |
public String[] splic(String regex) | 字符串拆分 |
public class Hello {
public static void main(String[] args) {
String s ="ghj45fghj5g2t66h2g5g5h55fg8f7g7";
String a = s.replaceAll("\\D+","+");
System.out.println(a);
String b[] = s.split("5+");
for(String x : b){
System.out.print(x+" ");
}
}
}