【我的Java笔记】正则表达式

Pattern & Matcher类

1.正则表达式常用的语法:



2.正则表达式中的常用方法:

(1)String类中的特有功能:

public boolean matches(String regex) 告知此字符串是否匹配给定的正则表达式

(2)String类的分割功能:

public String[] split(String regex) 根据给定正则表达式的匹配拆分此字符串

注:返回值类型是一个字符串数组类型

(3)String类中的替换功能(与正则表达式有关):

public String replaceAll(String regex,String replacement)

使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串


3.模式和匹配器的使用(Pattern & Matcher类中的方法):

步骤:

(1)获取模式对象:

public static Pattern compile(String regex) 将给定的正则表达式编译成一个模式对象

(2)通过模式获取匹配器对象 (将一个字符串类型的数据):

public static Matcher matcher(CharSequence input) 创建匹配给定输入与此模式的匹配器

(3)调用Matcher类中的匹配器判断当前录入的字符串是否和正则规则相匹配

public boolean matches() 尝试将整个区域与模式匹配


例(模式匹配器):

public class PatternDemo {
	public static void main(String[] args) {
		//1)获取模式对象(通过正则规则)
		Pattern p = Pattern.compile("a*b") ;
		//2)通过模式获取匹配器对象,(将一个字符串类型的数据)
		Matcher m = p.matcher("aaaaaab") ;
		//3)调用Match(匹配器类)中的:public boolean matches():判断当前用户录入的字符串是否和当前的正则规则匹配
		boolean flag = m.matches() ;
		//4)输出
		System.out.println("flag:"+flag);
	}
}


例(String分割功能的应用):

public class PatternDemo {
	public static void main(String[] args) {
				//定义个字符串
				String str1 = "aa,bb,cc" ;
				//使用分割功能
				String [] strArray1 = str1.split(",") ;
				//遍历字符串数组
				for(int x = 0 ; x < strArray1.length; x ++){
					System.out.println(strArray1[x]);
				}
				
				System.out.println("------------------");
				
				//字符串:
				String str2 = "aa       bb                    cc" ;
				//使用切割功能:
				String[] strArray2 = str2.split(" +") ;		//正则:表示一个或多个空格
				for(int x = 0 ; x <strArray2.length ; x++){
					System.out.println(strArray2[x]);
				}
				
				System.out.println("--------------------");
				
				String str3 = "aa.bb.cc" ;
				//分割功能
				String[] strArray3 = str3.split("\\.") ;		//定义正则:表示一个点
				for(int x =0 ; x<strArray3.length ; x ++){
					System.out.println(strArray3[x]);
				}
				
				//硬盘上的路径表现形式:用两个反斜线代表一个反斜线
				//E:\\JavaSE\\JavaCode\\day13
				String str4 = "E:\\JavaSE\\JavaCode\\day13" ;
				//使用分割功能
				String[] strArray4 = str4.split("\\\\") ;
				for(int x = 0 ; x <strArray4.length ; x ++){
					System.out.println(strArray4[x]);
				}
	}
}



例(String类替换功能的应用)

public class PatternDemo {
	public static void main(String[] args) {
		//定义一个字符串:
		String str = "helloword123JavaSE45678Javaweb" ;
				
		//需求:让当前这个字符串中的数字不显示出来
		//定义当前大串中数字定义正则规则 
		//String regex = "[0-9]+" ;
		String regex = "\\d+" ;
		String s = "*" ;
				
		//public String replaceAll(String regex,String replacement)
		String result = str.replaceAll(regex, s) ;
		System.out.println("result:"+result);
	}
}









课堂练习

练习一

/*
 * 需求:校验一个QQ号码
 * 		规则:1.由5到10位组成的数字
 * 			2.不能以0开头
 * */

/*
 * 分析:
 * 		1)键盘录入一个QQ号码,使用字符串接收
 * 		2)定义一个校验QQ的功能
 * 		3)在main()中调用返回boolean类型
 * */
import java.util.Scanner;

public class RegexDemo {
	public static void main(String[] args) {
		//创建键盘了录入对象
		Scanner sc = new Scanner(System.in) ;
				
		//录入并接收数据
		System.out.println("请您输入QQ号码: ");
		String QQ = sc.nextLine() ;
		boolean flag = checkQQ(QQ) ;
		System.out.println("flag: "+flag);
	}
			
	public static boolean checkQQ(String qq){
		//定义正则规则
		String regex = "[1-9][0-9]{4,9}" ;
				
		//public boolean matches(String regex)告知此字符串是否匹配给定的正则表达式。 
		boolean flag = qq.matches(regex) ;
		return flag ;
				
		//直接返回
		//return qq.matches("[1-9]\\d{4,9}");
	}
}




练习二

/*
 * 需求:校验手机号码
 * 		规则:1.第一位是1
 * 			2.第二位为3-8
 * 			3.一共11位数字
 * */

/*
 * 分析:
 * 		1)创建键盘录入对象,录入手机号码
 *		2)定义正则规则:
 *		3)String类的特有功能
 *			public boolean matches(String regex)告知此字符串是否匹配给定的正则表达式。 
 *		4)输出
 * */
import java.util.Scanner;

public class RegexDemo {
	public static void main(String[] args) {
		//创建键盘录入对象
		Scanner sc = new Scanner(System.in) ;
				
		//录入并接收
		System.out.println("请您输入一个手机号码:");
		String phone = sc.nextLine() ;
				
		//定义正则规则
		String regex = "1[38][0-9]{9}" ;
				
		//匹配当前正则表达式是否和录入的手机号符合
		boolean flag = phone.matches(regex) ;
		System.out.println("flag:"+flag);
	}
}






练习三

/*
 * 需求:校验邮箱
 * 		规则:919081924@qq.com
 * 			fengqingyang@163.com
 * 			xxxxx@126.com
 * 			zhangsan@westos.com
 * 			lisi@sina.com
 * 			wangwu@istone.com.cn....
 * */

/*
 * 分析:
 * 		1)键盘录入邮箱
 * 		2)定义正则规则
 * 		3)使用String中的特有功能校验
 * 		4)输出
 * */
import java.util.Scanner;

public class RegexDemo {
	public static void main(String[] args) {
		//创建键盘录入对象
		Scanner sc = new Scanner(System.in) ;
				
		//录入并接收
		System.out.println("请您输入一个邮箱:");
		String email = sc.nextLine() ;
				
		//定义正则规则:本身就是.-->\.--->\\.
		String regex = "\\w+@\\w{2,6}(\\.[a-zA-Z]{2,3})+" ;
				
		//校验
		boolean flag = email.matches(regex) ;
		System.out.println("flag:"+flag);
	}
}





练习四

/*
 * 需求:String分割功能的应用
 * 		18-24岁年龄的查找
 * */

import java.util.Scanner;

public class RegexDemo {
	public static void main(String[] args) {
		//定义一个字符串
		String ages = "18-24" ;
				
		//定义正则规则
		String regex = "-" ;
				
		//根据正则规则进行分割public String[] split(String regex)
		String[] strArray = ages.split(regex) ;
				
		//获得当前字符数组中的元素(转换int类型的数据)
		int startAge = Integer.parseInt(strArray[0]) ;
		int endAge = Integer.parseInt(strArray[1]) ;
				
		//键盘录入一个年龄,属于int类型的数据
		//创建键盘录入对象
		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("不是我们要找的");
		}
	}
}





练习五

/*
 * 需求:键盘录入一串数字,中间用空格隔开,进行排序后输出
 * 	         输入字符串:"1 3 2 5 4";
	         进行排序后输出"1 2 3 4 5"
 * 
 * 分析:
  			1)定义这个字符串
  			2)使用分割功能分割成一个字符串数组
  			3)如何得到一个int类型数组:动态初始化定义int数组 int[] arr = new int[字符串数数组.length] ;
  			4)遍历int数组
  					获取每一个元素:arr[x] = Integer.parseInt(字符串数组对象[x])
  			5)排序:Arrays数组工具类型快速排序:sort(arr)
  			6)再去遍历int类型数组获取每一个元素,用字符串缓冲区来进行拼接
  			7)输出字符串
 * 
 * 
 * */

import java.util.Arrays;
import java.util.Scanner;

public class RegexDemo {
	public static void main(String[] args){
		
		System.out.println("请输入一串数字,中间用'空格'隔开:");
		//创建键盘录入对象
		Scanner sc = new Scanner(System.in);
		String s1 = sc.nextLine();
		
		//定义正则规则
		String regex = " ";
		
		//使用分割功能
		String[] strArray = s1.split(regex);	//注:返回的为字符串数组
		
		//动态初始化
		int [] arr = new int[strArray.length];
		
		//遍历int类型数组,进行数组的动态赋值
		for(int i=0;i<arr.length;i++){
			arr[i] = Integer.parseInt(strArray[i]);
		}
		
		//调用Arrays类的排序功能
		Arrays.sort(arr);
		
		/*方式一:使用Arrays类中的toString()方法来转换成字符串
		 * String s3 = Arrays.toString(arr);
		 * System.out.println(s3);
		 * */
		
		//方式二:使用StringBuilder
		StringBuilder sb = new StringBuilder();
		
		//遍历进行StringBuilder的拼接
		for(int i=0;i<arr.length;i++){
			sb = sb.append(arr[i]).append(" ");
		}
		
		//将sb转换为String类型,并去除两端空格
		s1 = sb.toString().trim();
		System.out.println(s1);
		
	}
	
}














评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值