黑马程序员——java编程--正则表达式

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

七、正则表达式

/*
正则表达式:符合一定规则的表达式
	作用:用于专门操作字符串。
	特点:用一些特定的符号来表示一些代码操作,这样就简化书写。
	所以学习正则表达式就是在学习一些特殊符号的使用
	好处:简化对字符串的复杂操作
	弊端:符号定义越多,阅读性差

具体操作功能
1,匹配:matches方法,用规则匹配整个字符串,只要一出不符合,返回false
2,切割:spli
3,替换:replaceAll
4,获取:
*/



class  RegexDemo
{
	public static void main(String[] args) 
	{
		/*
		String str = "erkktykkkkuiqqqo";
		String reg = "(.)\\1+";//按照叠词完成切割//可以将规则封装成一个组用()
		//从1开始,想要使用已有的组可用\n表示,字符串中要再加\为\\n
		zhengZeSplit(str,reg);
		*/
		/*String reg = "\\d{5,}";
		String str = "wer13832155648ty1234564uiod2345654654f";
		String newStr = "#";
		replaceAllDemo(str,reg,newStr);
		*/

		String str1 = "erkktyqquizzzoppt";
		String reg1= "(.)\\1+";
		String newStr1 = "$1";
		replaceAllDemo(str1,reg1,newStr1);
		
	}
	//获取:想按照规则去指定的子串
	//操作步骤:
	//1,将正则封装成对象,
	//2,让正则对象和要操作的字符串关联
	//3,关联后,获取正则匹配引擎
	//4,通过引擎对符合规则的子串进行操作

	public static void replaceAllDemo(String str,String reg,String newStr)
	{
		str = str.replaceAll(reg,newStr);
		sop(str);
	}
	/*
	对qq号码进行校验
	要求:5-15  0不能开头,只能是数字
	checkQQ()方法复杂,不建议使用
	*/
	/*
	匹配
	手机号段只有13xxx   15xxx   18xxx
	*/

	public static void zhengZeSplit(String str,String reg)
	{
		String[] arr = str.split(reg);
		for(String s:arr)
		{
			sop(s);
		}
		
	}
	public static void splitDemo()
	{
		String str = "zhangsan.lisi.wangwu";

		String regex = "\\.";
		String[] arr = str.split(regex);
		for(String s:arr)
		{
			sop(s);
		}
	}
	public static void checkTel()
	{
		String str = "18742104265";
		String regex = "1[358]\\d{9}";
		boolean b = str.matches(regex);
		sop(b);
	}

	public static void demo()
	{
		String str = "b9563";
		String regex = "\\w\\d*";
		boolean b = str.matches(regex);
		sop(b);
	}
	public static void checkQQ_1()
	{
		String qq = "";
		String regex = "[1-9][0-9](4,14)";
		boolean flag = qq.matches(regex);
		if (flag)
			sop("输入正确");
		else
			sop("不合法");
		
	}
	
	public static void checkQQ()
	{
		String qq = "";
		int len = qq.length();
		if (len>=5&&len<=15)
		{
			if (!qq.startsWith("0"))
			{
				try
				{
					long l = Long.parseLong(qq);
					sop("qq:"+l);
				}
				catch (Exception e)
				{
					sop("出现非法字符");
				}
				
				/*char[] arr = qq.toCharArray();
				boolean flag = true;
				for (int x=0;x<arr.length ;x++ )
				{
					if (!(arr[x]>='0'&&arr[x]<='9'))
					{
						flag = false;
					}
				}
				if (flag)
				{
					sop("qq:"+qq);
				}
				else
					sop("出现非法字符");
					*/
			}
			else
				sop("不能0开头");
		}
		else
			sop("长度错误");
	}
	public static void sop(Object o)
	{
		System.out.println(o);
	}

}

Pattern和matcher对象

//获取:想按照规则去指定的子串
	//操作步骤:
	//1,将正则封装成对象,
	//2,让正则对象和要操作的字符串关联
	//3,关联后,获取正则匹配引擎
	//4,通过引擎对符合规则的子串进行操作

import java.util.regex.*;
class  RegexDemo2
{
	public static void main(String[] args) 
	{
		System.out.println("Hello World!");
	}
	public static void getDemo()
	{
		String str = "ming tian jiu yao fang jia le,da jia。"
		String reg = "\\b[a-z]{3}\\b";
		//将规则封装对象
		Pattern p = Pattern.compile(reg);
		//让正则对象和要作用的字符串相关联,获取匹配对象
		Matcher m = p.matcher(str);
		//其实String类中的matches方法用的就是pattern和matcher对象完成的
		//boolean b = m.find();//将规则作用到字符串上,并进行符合规则的子串查找
		//sop(b);
		//sop(m.group());
		while (m.find())
		{
			sop(m.group());
		}
	}
	public static void sop(Object o)
	{
		System.out.println(o);
	}
}


 

/*
 * 1、 编写一个可以获取文件扩展名的函数,
 * 形参接收一个文件名字符串,
 * 返回一个扩展名字符串。
 * 思路:文件名字符串的最后一“.”之后为文件的扩展名,所以需要用正则表达式将字符串拆分,去最后一个“.”之后的内容
 * 步骤:
 * 1,定义正则表达式“.”
 * 2,拆分存入String数组
 * 3,返回String数组最后一个元素
 * 
 */
public class Test5 {

	public static void main(String[] args) {
		//调用getExtraName()方法并传递文件名
		String extraname = getExtraName("demo.txt.java.mp4");
		System.out.println(extraname);
	}
	public static String getExtraName(String filename){
		//定义正则表达式
		String reg = "\\.";
		//按照给定的正则表达式切割主函数传递过来的String字符串并存进数组
		String[] arr = filename.split(reg);
		//返回数组最后一个元素,为文件的扩展名
		return arr[arr.length-1];
	}
}


/*
 * 9、 写一个正则表达式,可以匹配尾号5连的手机号。
 * 规则: 第1位是1,第二位可以是数字3458其中之一,
 * 后面4位任意数字,最后5位为任意相同的数字。
 * 例如:18601088888、13912366666
 */
public class Test9 {
		public static void main(String[] args) 
	        {
				String str = "13912366666";
				String reg = "1[3458]\\d{4}(\\d)\\1{4}";
				System.out.println(str.matches(reg));
	        }
	}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值