zoukankan      html  css  js  c++  java
  • 黑马程序员- 正则表达式

     ------- 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当中的规则。在进入黑马以后我会陆续补上的。

     

  • 相关阅读:
    LeetCode 227. Basic Calculator II
    LeetCode 224. Basic Calculator
    LeetCode 103. Binary Tree Zigzag Level Order Traversal
    LeetCode 102. Binary Tree Level Order Traversal
    LeetCode 106. Construct Binary Tree from Inorder and Postorder Traversal
    LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal
    LeetCode 169. Majority Element
    LeetCode 145. Binary Tree Postorder Traversal
    LeetCode 94. Binary Tree Inorder Traversal
    LeetCode 144. Binary Tree Preorder Traversal
  • 原文地址:https://www.cnblogs.com/ganwei/p/4574422.html
Copyright © 2011-2022 走看看