Java 中的正则及Lambda表达式

138 阅读3分钟

正则

正则表达式

      正则表达式可以用一些规定的字符来制定规则,并用来校验数据格式的合法性。

正则规则类型 

      字符类(默认匹配一个字符)

      1. [abc] :只能是a\b\c ;

      2. [^abc] : 除了a\b\c 之外的任何字符 ;

      3. [a-zA-Z]:a到z,A到Z,包括 ;

      4. [a-d[m-p]]:a到d,或m到p,即[a-dm-p] ;

      5. [a-z&&[def]]:只能d\e\f 取交集 ;

      6. [a-z&&[^bc]]:除b、c之外的a-z的字符,即[ab-z];

       7. [a-z&&[^m-p]]:除m-p之外的a-z的字符 ,即[a-lq-z] 。

预定义的字符类(默认匹配一个字符)

        1.   .   任何字符;

        2.  \d 一个数字: [0-9] ;

        3.  \D 表示非数字: [^0-9] ;

        4.  \s 一个空白字符: [\t\n\x0B\f\r] ;

        5.  \S 非空白字符 ;

        6.  \w [a-zA-Z_0-9]英文、数字、下划线 ;

        7.  \W [^\w] 一个非单词字符。

贪婪的量词 (配合匹配多个字符)

         1.   x?   x出现0或1次 ;

         2.   x*   x出现0或多次;

         3.   x+   x出现1次或多次;

         4.   x{n}   x必须出现n次;

         5.   x{n,}   x最少出现n次 ;

         6,   x{n,m}   x 最少出现n次,但不超过m次。

用法 

      字符串提供了匹配正则表达式规则的API。

       public boolean matches(String regex); 

       判断是否匹配正则表达式,匹配为true 则为false;

正则表达式在字符串中的使用 

       1.  public String replaceAll(String regex,String newStr) :

          按照正则表达式匹配的内容进行替换新的 字符串;

       2.  public String[] split(String regex) : 

          按照正则表达式匹配的内容进行分割字符串,返回一个字符串数组。 

 Pattern & Matcher

         Pattern p = Pattern.compile("a*b"); 

         Matcher m = p.matcher("aaaaab"); 

         boolean b = m.matches();

Lambda

概述

     Lambda 表达式式JDK 8 开始后的一种新语法形式。

 作用 

          简化匿名内部类的代码写法:

          (匿名内部类被重写的形参列表) -> { 

                 被重写方法的方法体

           }

          :-> 是语法形式,无实际含义。

          :Lambda 表达式只能简化函数式接口的匿名内部类的写法形式。

什么是函数式接口

         1.  首先必须是接口,其次接口中有且仅有一个抽象方法;

         2. 通常我们会在接口上加一个@FunctionalInterface注解,标记该接口必须满足函数式接口 。

public class TestLambda {
   public static void main(String[] args) {
      // 简化一 
      Swimming s = () -> {
        System.out.println("小红蝶泳出发");
      }; 
      go(s); 
      // 简化二 
      go(() -> {
        System.out.println("小蓝蝶泳出发");
      }); 
    } 
    public static void go(Swimming s) { 
        System.out.println("开始。。。"); 
        s.swim();
        System.out.println("结束。。。");
    } 
}
@FunctionalInterface
interface Swimming {
   void swim(); 
} 

 好处

     Lambda式一个匿名函数,我们可以把Lambda表达式理解是一段可以传递的代码,它可以写出更简洁、更灵活的代码,作为一种更紧凑的代码风格,使Java语言表达能力得到提升。

常见的可使用Lambda表达式简化的接口

      1.   简化Comparator接口 :

 public static void main(String[] args) {
    Integer[] ages = {66,33,11,77,44};
    Arrays.sort(ages,(o1,o2) -> return o2-o1);
    System.out.println(Arrays.toString(ages));
 } 

      2. 简化按钮监听器ActionListener接口:

 public static void main(String[] args) { 
    // 代码省略... 
     JButton btn = new JButton("登录");
     btn.addActionListener(e -> System.out.println("触发了按钮"));、
     // 代码省略... 
}

Lambda 表达式的省略写法 (进一步在Lambda表达式的基础上继续简化)

     1. 参数类型可以省略不写; 

     2. 如果只有一个参数,参数类型可以省略,同时()也可以省略。 

     3. 如果Lambda表达式的方法体代码只有一行,可以省略大口号不写,同时省略分号;

     4. 如果Lambda表达式的方法提代码只有一行,此时如果这行代码式return 语句,必须省略return不写, 同时也必须省略;不写。