• 黑马程序员- 正则表达式


     ------- android培训java培训、期待与您交流! ----------

    • 为什么?:为什么要有正则表达式。

    我们先看看一个练习:

    对QQ号进行校验:

    要求:5~15位, 0不能开头,只能是数字

    代码如下

    	static boolean getRightQQ(String QQ)
    	{
    		// 1.先判断是否是5到15位数值
    		//
    		boolean yes = true;
    		int len = QQ.length();
    		if (5 <= len && len <= 15)
    		{
    			// 判断开始字符
    			if (QQ.startsWith("0"))
    			{
    				System.out.println(QQ + "号码以0开头");
    				yes = false;
    
    			} else
    			{
    				// 判断是否是数字
    				char[] qq = QQ.toCharArray();
    				for (int i = 0; i < qq.length; i++)
    				{
    					if (qq[i] >= '0' && qq[i] <= '9')
    					{
    						// 那么就是不含有字符的。
    						return yes;
    					} else
    					{
    						// 含有字符的。
    						System.out.println("输入的QQ号码含有字符");
    						yes = false;
    					}
    				}
    			}
    		} else
    		{
    			System.out.println(QQ + "长度错误");
    			yes = false;
    		}
    		return yes;
    	}
    

      


    总觉得那样校验很麻烦,写了一大堆的代码:我们在来看看正则表达式的效果

    代码如下

     

    static void getRegex()
    	{
    		//如果我们用的是正则表达式的话: 
    		String zhu = "846650266";
    		//匹配手机号
    		
    		String regex1 = "";
    		String regex = "[1-9]\d{4,14}";
    		boolean flag = zhu.matches(regex);
    		
    		
    		if (flag)
    		{
    			System.out.println(zhu+"合法>>>>>>>"+flag);
    		}
    		else {
    			System.out.println(zhu+"不合法>>>>>>>"+flag);
    		}
    	}
    	
    

      


    java.util.regex 包:

    经过上面的练习我们可以看出正则表达式是代码简单了许多。不是那么的沉重。

    什么是正则表达式呢?

    正则表达式定义了字符串的模式。

    正则表达式可以用来搜索、编辑或处理文本。

    正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。

    Java正则表达式和Perl的是最为相似的。

    作用:用来传门操作字符串

    特点:用一些特点的符号来表示一些代码操作

    所以我们在学习正则表达式,就是学习一些特殊的符号

    好处:就是可以简化我们的操作。

    缺点:符号定义越多,正则表达式就会越长,阅读就会越难操作


    具体操作

    • Matcher类:

      Matcher对象是对输入字符串进行解释和匹配操作的引擎。与Pattern类一样,Matcher也没有公共构造方法。你需要调用Pattern对象的matcher方法来获得一个Matcher对象。类的实例用于此目的则不安全。

    • Pattern类:

      pattern对象是一个正则表达式的编译表示。Pattern类没有公共构造方法。要创建一个Pattern对象,你必须首先调用其公共静态编译方法,它返回一个Pattern对象。该方法接受一个正则表达式作为它的第一个参数。

    • PatternSyntaxException:

      PatternSyntaxException是一个非强制异常类,它表示一个正则表达式模式中的语法错误。


    练习和模拟:

    • 匹配  matches()
    static boolean getRightQQ(String QQ)
    	{
    		// 1.先判断是否是5到15位数值
    		//
    		boolean yes = true;
    		int len = QQ.length();
    		if (5 <= len && len <= 15)
    		{
    			// 判断开始字符
    			if (QQ.startsWith("0"))
    			{
    				System.out.println(QQ + "号码以0开头");
    				yes = false;
    
    			} else
    			{
    				// 判断是否是数字
    				char[] qq = QQ.toCharArray();
    				for (int i = 0; i < qq.length; i++)
    				{
    					if (qq[i] >= '0' && qq[i] <= '9')
    					{
    						// 那么就是不含有字符的。
    						return yes;
    					} else
    					{
    						// 含有字符的。
    						System.out.println("输入的QQ号码含有字符");
    						yes = false;
    					}
    				}
    			}
    		} else
    		{
    			System.out.println(QQ + "长度错误");
    			yes = false;
    		}
    		return yes;
    	}
    

      

    • 切割  split()
    static void splitDemo()
    	{
    		String kk = "abcdeefghhijklmnopqrsttuvwwxyz";
    		
    		//把上面的的字串重复的进行切割
    		String regex = "(.)\1+";
    		String[] strarry= kk.split(regex);
    		
    		for (String string : strarry)
    		{
    			System.out.println(string);
    		}
    	}
    

      

    • 替换  replace()
    static void replaceDemo()
    	{
    		//字符串的替换的操作
    		//替换  叠词
    		String str ="abcdeefghhijklmnopqrsttuvwwxyz";
    		//将所有的重复的词都替换成为 #
    		String regex = "(.)\1+";
    		//这里用到了组的操作
    		str=str.replaceAll(regex, "#");
    		System.out.println(str);
    	}
    

      

    • 获取

    1.将正则表达式封装成为对象

    2.让正则对象和要操作的字符串相关联

    3.关联后,获取正则匹配引擎

    3.通过引擎对符合匹配的子串进行操作。

    结语:正则表的式应用还有许多,比如网络爬虫的写法。但是在我学习的过程当中。一直没有办法深入的学习下去。

    不知道为何就是觉得有些难,非常拗口,但是我并不怕,只是觉得目前很少用到,花大量的时间去记住那些匹配规则

    我就会很容易忘记, 记住了一些方法,和API当中的规则。在进入黑马以后我会陆续补上的。

     

  • 相关阅读:
    Spring Boot 学习(一) 快速搭建SpringBoot 项目
    @RunWith和 SpringJUnit4ClassRunner ---->junit4和Spring一起使用
    Spring Boot的SpringApplication类详解
    @SpringBootApplication的使用
    使用阿里云搭建个人博客
    @Controller和@RestController的区别?
    蚂蚁金服开发文档中心
    Logger.getLogger()和LogFactory.getLog()的区别
    SimpleDateFormat使用详解
    SpringBoot整合RabbitMQ实现微服务间的异步消息沟通
  • 原文地址:https://www.cnblogs.com/ganwei/p/4574422.html
Copyright © 2020-2023  润新知