java中正则表达式的应用
- 判断功能
- public boolean matches(String regex)
- 分割功能
- public String[] split(String regex)
- 替换功能
- public String replaceAll(String regex,String replacement)
- 获取功能
- Pattern和Matcher类的使用
判断功能
public boolean matches(String regex)
/*需求:
* 判断手机号码是否满足要求?
*
* 分析:
* A:键盘录入手机号码
* B:定义手机号码的规则
* 13436975980
* 13688886868
* 13866668888
* 13456789012
* 13123456789
* 18912345678
* 18886867878
* 18638833883
* C:调用功能,判断即可
* D:输出结果
* 我们目前就用这几个电话号码来定义规则
*/
import java.util.Scanner;
class test{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
//提示输入手机号
System.out.println("请输入一个手机号码");
String phone = sc.nextLine();
//定义手机号规则,首先观察上面手机号,都是以1开头,
//其次就是以3 8开头,剩下的都式数字,所以定义规则就是
String regex = "1[38]\\d{9}";
//解释一下,第一个1就是说明以1开头然后[38]就是说明选择3或者8
//\\就是说明是全部数字,{9}说明恰好是多少数字
//因为前面有1[38]两个数字了,所以{9}再加上2就是11,电话号码11位
//调用判断功能
boolean falg =phone.matches(regex);
System.out.println("falg:"+falg);
}
}
输出结果
分割功能
public String[] split(String regex)
通过正则表达式的匹配拆分此字符串
/*
需求:我们需要输出一个年龄,如果是在18-24,
就输出“你是我要找的人”否则输出“你不是我要找的”
分析:
A:键盘录入一个年龄
B:定义规则
C:调用方法
D:输出结果
*/
class test{
public static void main(String[] args){
//定义一个搜索范围
String ages = "18-24";
//定义规则,既然要得到18 24就要把"-"拆掉,所以直接定义规则
String regex = "-";
//调用方法,调用拆分方法,把"-"拆掉
String[] strArray = ages.split(regex);
//遍历一下就得到结果
for(int x = 0 ; x<strArray.length ; x++){
System.out.println(strArray[x]);
//输出结果为18 24
}
------------------------------------------------------------
//通过上面的代码,我们知道了拆分的原理
//定义一个搜索范围
for(int i = 0 ; int i <= 2 ; i++){
String ages = "18-24";
//定义规则,既然要得到18 24就要把"-"拆掉,所以直接定义规则
String regex = "-";
//调用方法,调用拆分方法,把"-"拆掉
String[] strArray = ages.split(regex);
//但是我们需要用int类型
//如何得到一个int类型呢?
//用Integer.parseInt();将字符串数组转为int类型
int startage = Integer.parseInt(strArray[0]);
int endage = Integer.parseInt(strArray[1]);
//键盘录入一个年龄
Scanner sc = new Scanner(System.in);
//提示输入年龄
System.out.println("请输入你的年龄:");
int age = sc.nextInt();
if(age>=startage && age<=endage){
System.out.println("你是我要找的人");
}else{
System.out.println("你不是我要找的") ;
}
}
}
}
输出结果为
替换功能
public String replaceAll(String regex,String replacement)
使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串
class test{
public static void main(String[] args){
//定一个字符串
String s = "hello215what205you11111235do";
//我要去除所有的数字,用*给替换掉
//定义规则
String regex = "\\d+";
//用*替换
String ss = "*";
//调用方法,用String类型接受
String x = s.replaceAll(regex,ss);
System.out.println("x:"+x);
//输出结果为:x:hello*what*you*do
--------------------------------------------------------------------
//定一个字符串
String s = "hello215what205you11111235do";
//我要去除所有的数字,用*给替换掉
//这次我们这样替换,遇到数字就换成*
//定义规则
String regex = "\\d";
//用*替换
String ss = "*";
//调用方法,用String类型接受
String x = s.replaceAll(regex,ss);
System.out.println("x:"+x);
//输出结果为:x:hello***what***you********do
--------------------------------------------------------------------
//直接把数字去掉
//定一个字符串
String s = "hello215what205you11111235do";
//我要直接除取去所有的数字
//定义规则
String regex = "\\d";
//用""代替
String ss = "";
//调用方法,用String类型接受
String x = s.replaceAll(regex,ss);
System.out.println("x:"+x);
//输出结果为:x:hellowhatyoudo
}
}
获取功能
Pattern和Matcher类的使用
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
* 获取功能
* Pattern和Matcher类的使用
*
* 模式和匹配器的基本使用顺序
*
* 获取功能:
* 获取下面这个字符串中由三个字符组成的单词
* da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?
*/
public class RegexDemo {
public static void main(String[] args) {
// 定义字符串
String s = "da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?";
// 规则
String regex = "\\b\\w{3}\\b";
// 把规则编译成模式对象
Pattern p = Pattern.compile(regex);
// 通过模式对象得到匹配器对象
Matcher m = p.matcher(s);
// 调用匹配器对象的功能
// 通过find方法就是查找有没有满足条件的子串
// public boolean find()
// boolean flag = m.find();
// System.out.println(flag);
// // 如何得到值呢?
// // public String group()
// String ss = m.group();
// System.out.println(ss);
//
// // 再来一次
// flag = m.find();
// System.out.println(flag);
// ss = m.group();
// System.out.println(ss);
while (m.find()) {
System.out.println(m.group());
}
// 注意:一定要先find(),然后才能group()
// IllegalStateException: No match found
// String ss = m.group();
// System.out.println(ss);
}
}