当前位置:   article > 正文

day05-Arrays-Lambda-算法-正则表达式【JAVA】

day05-Arrays-Lambda-算法-正则表达式【JAVA】

目录

Arrays

Lambda【重点】

方法引用

算法

正则表达式


Arrays

  • 作用

    • 用于操作数组

  • 常用方法

    • 把数组内容转换为一个字符串

      • String static toString(数组)

    • 数组排序的方法

      • 基本数据类型的数组

        • static void sort(数组)

      • 引用数据类型的数组

        • static void sort(数组)

          • JavaBean实现Comparable<泛型>

          • 重写一个 compareTo( 类型 对象名), 指定比较规则

        • static void sort(数组 , new Comparator<泛型>(){ 重写规则 })

    • 数组元素查找的方法

      • int binarySearch(数组, 元素)

  1. import java.util.Arrays;
  2. import java.util.function.IntUnaryOperator;
  3. public class Test {
  4.    public static void main(String[] args) {
  5.        int[] arr = {3,2,1,4,5};
  6.        System.out.println(Arrays.toString(arr));//转为字符串输出
  7.        
  8.        int[] arr1 = Arrays.copyOfRange(arr,0,2);
  9.        System.out.println(Arrays.toString(arr1));//拷贝索引0-2的内容到新数组(不包括2)
  10.        
  11.        int[] arr2 = Arrays.copyOf(arr,4);
  12.        System.out.println(Arrays.toString(arr2));//拷贝4个元素到新数组
  13.        
  14.        Arrays.setAll(arr, new IntUnaryOperator() {
  15.            @Override
  16.            public int applyAsInt(int operand) {
  17.                return arr[operand] += 5;
  18.           }//所有数组元素加上5
  19.       });
  20.        Arrays.sort(arr);
  21.        
  22.        System.out.println(Arrays.toString(arr));
  23.        
  24.        int num = Arrays.binarySearch(arr, 2);//查询数组中是否存在该元素,是返回0,否返回-1
  25.        System.out.println(num);
  26.   }
  27. }

Lambda【重点】

  • 作用

    • 简化匿名内部类

      • 函数式接口

        • 这个接口中有且只有一个抽象方法

        • @FunctionalInterface

  • 格式

    • (参数 ) -> { 重写的方法体 }

  1. public class Student implements Comparable<Student>{//实现Comparable接口并重写compareTo方法
  2.    private String name;
  3.    private int age;
  4.    private double height;
  5.    public Student() {
  6.   }
  7.    public Student(String name, double height, int age) {
  8.        this.name = name;
  9.        this.age = age;
  10.        this.height = height;
  11.   }
  12.    /**
  13.     * 获取
  14.     * @return name
  15.     */
  16.    public String getName() {
  17.        return name;
  18.   }
  19.    /**
  20.     * 设置
  21.     * @param name
  22.     */
  23.    public void setName(String name) {
  24.        this.name = name;
  25.   }
  26.    /**
  27.     * 获取
  28.     * @return age
  29.     */
  30.    public int getAge() {
  31.        return age;
  32.   }
  33.    /**
  34.     * 设置
  35.     * @param age
  36.     */
  37.    public void setAge(int age) {
  38.        this.age = age;
  39.   }
  40.    /**
  41.     * 获取
  42.     * @return height
  43.     */
  44.    public double getHeight() {
  45.        return height;
  46.   }
  47.    /**
  48.     * 设置
  49.     * @param height
  50.     */
  51.    public void setHeight(double height) {
  52.        this.height = height;
  53.   }
  54.    @Override
  55.    public String toString() {
  56.        return "Student{" +
  57.                "name='" + name + '\'' +
  58.                ", age=" + age +
  59.                ", height=" + height +
  60.                '}';
  61.   }
  62.    @Override
  63.    public int compareTo(Student o) {
  64.        return 0;
  65.   }
  66. }
  67. ///
  68. import java.util.Arrays;
  69. import java.util.Comparator;
  70. public class Test {
  71.    public static void main(String[] args) {
  72.        Student[] students = new Student[4];
  73.        students[0] = new Student("蜘蛛精", 169.5, 23);
  74.        students[1] = new Student("青霞", 163.8, 25);
  75.        students[2] = new Student("紫霞", 163.8, 26);
  76.        students[3] = new Student("至尊宝", 167.5, 24);
  77.        /*Arrays.sort(students, new Comparator<Student>() {
  78.            @Override
  79.            public int compare(Student o1, Student o2) {
  80.                int num = Double.compare(o1.getHeight(), o2.getHeight());
  81.                if (num == 0){
  82.                    num = Double.compare(o2.getAge(), o1.getAge());
  83.                }
  84.                return num;
  85.            }
  86.        });*/
  87.        Arrays.sort(students, (Student o1,Student o2) -> {//使用Lambda简化代码
  88.                int num = Double.compare(o1.getHeight(), o2.getHeight());//比较大小,左大返回正整数,右大返回负整数
  89.                if (num == 0){
  90.                    num = Double.compare(o2.getAge(), o1.getAge());
  91.               }
  92.                return num;
  93.       });
  94.        System.out.println(Arrays.toString(students));
  95.   }
  96. }

方法引用

  • 作用

    • 简化Lambda表达式

      • 我们写的lambda里面如果只有一句代码

  • 格式

    • 静态方法引用

      • 类名::方法名;

    • 成员方法引用

      • 对象名::方法名;

    • 特定类型方法引用

      • 类型::方法名;

        • 方法上一定是有多个参数,然后第一个参数,作为对象去调用实现的方法,后面的参数作为入参

    • 构造器引用

      • 类名::new

  1. public class MyUtils {//工具类
  2.    // 静态方法,用于获取两个整数的最大值
  3.    public static int getMax(int a, int b) {
  4.        return a > b ? a : b;
  5.   }
  6.    // 实例方法,获取两个数字的最小值
  7.    public int getMin(int a, int b) {
  8.        return a < b ? a : b;
  9.   }
  10. }
  11. ///
  12. public class Test {
  13.    public static void main(String[] args) {
  14.        A a = MyUtils::getMax;//静态方法引用
  15.        System.out.println(a.max(10,20));
  16.        MyUtils myUtils = new MyUtils();
  17.        B b = myUtils::getMin;//成员方法引用
  18.        System.out.println(b.min(10,20));
  19.   }
  20. }
  21. interface A{
  22.    int max(int a, int b);
  23. }
  24. interface B{
  25.    int min(int a, int b);
  26. }

算法

  • 学习方式

    • 掌握思想

    • 再写代码实现

  • 分类

    • 冒泡排序:每次从数组中找出最大值放在数组的后面去

    • 选择排序:每轮选择当前位置,开始找出后面的较小值与该位置交换

    • 二分查找:每次排除一半的数据,查询数据的性能明显提高极多!二分查找正常的折半条件应该是开始位置left <= 结束位置right

  1. import java.util.Arrays;
  2. public class Test {
  3.    public static void main(String[] args) {
  4.        int[] arr = {3,9,6,1,5,7};
  5.        //冒泡排序
  6.        for (int i = 0; i < arr.length-1; i++) {
  7.            for (int j = 0; j < arr.length-1-i; j++) {
  8.                if (arr[j] > arr[j+1]) {
  9.                    int temp = arr[j];
  10.                    arr[j] = arr[j+1];
  11.                    arr[j+1] = temp;
  12.               }
  13.           }
  14.       }
  15.        System.out.println(Arrays.toString(arr));
  16.        int[] arr1 = {3,9,6,1,5,7};
  17.        //选择排序
  18.        for (int i = 0; i < arr1.length; i++) {
  19.            for (int j = 0; j < arr1.length; j++) {
  20.                if (arr1[i] < arr1[j]) {
  21.                    int temp = arr1[i];
  22.                    arr1[i] = arr1[j];
  23.                    arr1[j] = temp;
  24.               }
  25.           }
  26.       }
  27.        System.out.println(Arrays.toString(arr1));
  28.        int [] arr2 = {11,12,25,34,45,58,67,78,84,99};
  29.        System.out.println(get(arr2 ,100));
  30.   }
  31.    //二分查找
  32.    public static int get(int[] arr , int key) {
  33.        int left  = 0;
  34.        int right = arr.length - 1;
  35.        while (left <= right) {
  36.            int mid = (left + right) / 2;
  37.            if (key > arr[mid]) {
  38.                left = mid + 1;
  39.           }else if (key < arr[mid]){
  40.                right = mid - 1;
  41.           }else {
  42.                return mid;
  43.           }
  44.       }
  45.        return -1;
  46.   }
  47. }

正则表达式

  • 作用

    • 判断数据是否符合某一种规则

    • 从文本中爬取数据

  • 规则

    • [任意内容]

      • 代表一个符号

    • \d

      • 代表数字

    • \w

      • 数字、字母、下划线

    • .

      • 任意的符号,除了 \n

    • 数量词

      • {1 ,}

        • 至少出现1次,或多次

      • {1,3}

        • 至少出现1次,最多出现3次

      • {5}

        • 只能出现5次

    • ()

      • 分组

    • |

      • 或者

示例

  1. public class Test {
  2.    public static void main(String[] args) {
  3.        System.out.println("-----------------------1、字符类(只能匹配单个字符)--------------------------------");
  4.        // 1、字符类(只能匹配单个字符)
  5.        System.out.println("a".matches("[abc]"));  // true
  6.        System.out.println("e".matches("[abcd]")); // false
  7.        System.out.println("d".matches("[^abc]")); // true
  8.        System.out.println("a".matches("[^abc]")); // false
  9.        System.out.println("b".matches("[a-zA-Z]")); // true
  10.        System.out.println("2".matches("[a-zA-Z]")); // false
  11.        System.out.println("k".matches("[a-z&&[^bc]]")); // true
  12.        System.out.println("b".matches("[a-z&&[^bc]]")); // false
  13.        System.out.println("ab".matches("[a-zA-Z0-9]")); // false
  14.        System.out.println("------------------ 2、.代表所有的字符-------------------------------------");
  15.        // 2、预定义字符(只能匹配单个字符) . \d \D   \s \S \w \W
  16.        System.out.println("木".matches(".")); // true
  17.        System.out.println("a".matches(".")); // true
  18.        System.out.println("沐沐".matches(".")); // false
  19.        System.out.println("------------------ \\d 预定义字符[0-9]代表数字-------------------------------------");
  20.        // \d 预定义字符[0-9]代表数字
  21.        // \是表示特殊字符的: \n换行字符 \t是空格字符
  22.        // 在开发中,如果希望后面的内容就是其原始内容,应该再加上一个\转义
  23.        System.out.println("2".matches("\\d")); // true
  24.        System.out.println("21".matches("\\d")); // false
  25.        System.out.println("a".matches("\\d")); // false
  26.        System.out.println("---------------------\\D不能是数字----------------------------------");
  27.        // \D不能是数字
  28.        System.out.println("2".matches("\\D")); // false
  29.        System.out.println("a".matches("\\D")); // true
  30.        System.out.println("---------------------\\s代表空格----------------------------------");
  31.        // \s代表空格
  32.        System.out.println(" ".matches("\\s")); // true
  33.        System.out.println("a".matches("\\s")); // false
  34.        System.out.println("-----------------------\\S不能是空格--------------------------------");
  35.        // \S不能是空格
  36.        System.out.println(" ".matches("\\S")); // false
  37.        System.out.println("a".matches("\\S")); // true
  38.        System.out.println("---------------------\\w 代表[a-zA-Z_0-9]----------------------------------");
  39.        // \w 代表[a-zA-Z_0-9]
  40.        System.out.println("a".matches("\\w")); // true
  41.        System.out.println("_".matches("\\w")); // true
  42.        System.out.println("2".matches("\\w")); // true
  43.        System.out.println("ab2".matches("\\w")); // false
  44.        System.out.println("------------------\\W 不能是 [a-zA-Z_0-9]------------------------------------");
  45.        // \W 不能是 [a-zA-Z_0-9]
  46.        System.out.println("a".matches("\\W")); // false
  47.        System.out.println("2".matches("\\W")); // false
  48.        System.out.println("中".matches("\\W")); // true
  49.        System.out.println("-----------------3、 ? 代表前面的内容可以出现 1次或者0次--------------------------------------");
  50.        // 3、数量词: ?   *   +   {n}   {n, } {n, m}
  51.        // ? 代表前面的内容可以出现 1次或者0次
  52.        System.out.println("a".matches("\\w?")); // true
  53.        System.out.println("".matches("\\w?")); // true
  54.        System.out.println("abc".matches("\\w?")); // false
  55.        System.out.println("------------------------ * 0次或者多次-------------------------------");
  56.        // * 0次或者多次 w[0-9a-zA-Z_]
  57.        System.out.println("abc12".matches("\\w*")); // true
  58.        System.out.println("".matches("\\w*")); // true
  59.        System.out.println("abc12张".matches("\\w*")); // false
  60.        System.out.println("----------------------+ 1次或者多次---------------------------------");
  61.        // + 1次或者多次
  62.        System.out.println("abc12".matches("\\w+")); // true
  63.        System.out.println("".matches("\\w+")); // false
  64.        System.out.println("abc12张".matches("\\w+")); // false
  65.        System.out.println("----------------------{n} 正好n次 {n, m} 至少n次最多m次 {n, } 至少n次---------------------------------");
  66.        // {n} 正好n次 {n, m} 至少n次最多m次 {n, } 至少n次
  67.        System.out.println("a3c".matches("\\w{3}")); // true
  68.        System.out.println("abcd".matches("\\w{3}")); // false
  69.        System.out.println("abcd".matches("\\w{3,}")); // true
  70.        System.out.println("ab".matches("\\w{3,}")); // false
  71.        System.out.println("abcde木".matches("\\w{3,}")); // false
  72.        System.out.println("abc232d".matches("\\w{3,9}")); // true
  73.        System.out.println("--------------------4、其他几个常用的符号:(?i)忽略大小写 、 或:| 、 分组:()-----------------------------------");
  74.        // 4、其他几个常用的符号:(?i)忽略大小写 、 或:| 、 分组:()
  75.        System.out.println("abc".matches("(?i)abc")); // true
  76.        System.out.println("ABC".matches("(?i)abc")); // true
  77.        System.out.println("-----------");
  78.        System.out.println("aBc".matches("a((?i)b)c")); // true
  79.        System.out.println("ABc".matches("a((?i)b)c")); // false
  80.        System.out.println("-------------------需求1:要求要么是3个小写字母,要么是3个数字。------------------------------------");
  81.        // 需求1:要求要么是3个小写字母,要么是3个数字。
  82.        System.out.println("123".matches("[a-z]{3}|\\d{3}")); // true
  83.        System.out.println("abc".matches("[a-z]{3}|\\d{3}")); // true
  84.        System.out.println("ab2".matches("[a-z]{3}|\\d{3}")); // false
  85.        System.out.println("-------------------需求2:必须是”我爱“开头,中间可以是至少一个”编程“,最后至少是1个”666“---------------------------------");
  86.        // 需求2:必须是”我爱“开头,中间可以是至少一个”编程“,最后至少是1个”666“
  87.        System.out.println("我爱编程编程666666".matches("我爱(编程)+(666)+")); // true
  88.        System.out.println("我爱编编程编程666666".matches("我爱(编程)+(666)+")); // false
  89.        System.out.println("我爱编程编程编程编程编程666666666".matches("我爱(编程)+(666)+")); // true
  90.   }
  91. }

案例

  1. public class Test {
  2.    public static void main(String[] args) {
  3.        System.out.println(checkTime("20200810")); // true
  4.        System.out.println(checkTime("2020-08-10")); // true
  5.        System.out.println(checkTime("2020-08-31")); // true
  6.        System.out.println(checkTime("2020-08-41")); // false
  7.        System.out.println(checkTime("2020-00-21")); // false
  8.        System.out.println("------------------------------------");
  9.        System.out.println(checkEmail("326370094@qq.com")); // true
  10.        System.out.println(checkEmail("326370094@qq.com.cn")); // true
  11.        System.out.println(checkEmail("326370094@qq1234.com.cn")); // false
  12.        System.out.println(checkEmail("326370094中@qq14.com.cn")); // false
  13.        System.out.println(checkEmail("326370094@qq14")); // false
  14.        System.out.println(checkEmail("326370094@qq14.com.com.com")); // false
  15.        System.out.println("------------------------------------");
  16.        System.out.println(checkPhone("18512516758"));
  17.        System.out.println(checkPhone("1851251675"));
  18.        System.out.println(checkPhone("010-98951256"));
  19.        System.out.println(checkPhone("010-08951256"));
  20.        System.out.println(checkPhone("01098951256"));
  21.        System.out.println(checkPhone("400-618-9090"));
  22.        System.out.println(checkPhone("400-618-90900"));
  23.        System.out.println(checkPhone("4006189090"));
  24.        System.out.println("-------------------------");
  25.        System.out.println(checkPhone("400-6189090"));
  26.   }
  27.    /*
  28.        电话:手机 + 座机 + 热线电话
  29.              手机格式: 首位为1,中间是[3-9]的数字,后面9个都是数字
  30.              座机: 前面三个数字是区号(第一个一定是0后面2个数字可以是0-9之间的数字),
  31.                    中间可以有横杠(-)也可以没有,
  32.                    最后就是八个数字(第一个一定不是0)
  33.              热线电话:
  34.                     前面三个数字就是400,可以有横杠,也可以没有(-),再来三个数字,再来一个横杠,可以有可以没有,最后再来4个数字
  35.     */
  36.    public static boolean checkPhone(String number){
  37.        String regex = "(1[3-9]\\d{9})|(0\\d{2}-?[1-9]\\d{7})|(400-\\d{3}-\\d{4})|(400\\d{3}\\d{4})";
  38.        return number.matches(regex);
  39.   }
  40.    /*
  41.        邮箱:
  42.               可以是字母可以出现多个 加上一个@符号,可以是数字,
  43.               可以是字母,至少有2个 加上一个.加上域名,可以是两个字母,
  44.               也可以是三个 ,可以有一段,也可以有两段
  45.               326370094@qq.com
  46.     */
  47.    public static boolean checkEmail(String email) {
  48.        String regex = "[a-zA-Z0-9]{1,}@[a-zA-Z0-9]{2,5}(\\.[a-z]{2,3}){1,2}";
  49.        return email.matches(regex);
  50.   }
  51.    /*
  52.        时间:
  53.                20230813
  54.                2023-08-31
  55.                 前面四个是数字,中间可以有横杠也可以没有,月份[以0开始,后面的数字只能是1-9 , 如果是以1开头 第二个数字只能是 0 1 2 ]
  56.                 日[0开头后面只能是[1-9], 12开头后面数字就可以是[0-9] , 3[0,1]]
  57.     */
  58.    public static boolean checkTime(String time) {
  59.        String regex = "\\d{4}-?((0[1-9])|(1[012]))-?((0[1-9])|([12]\\d)|(3[01]))";
  60.        return time.matches(regex);
  61.   }
  62. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/779834
推荐阅读
相关标签
  

闽ICP备14008679号