当前位置:   article > 正文

day14(①正则表达式②Arrays类③常见算法④Lambda表达式)

day14(①正则表达式②Arrays类③常见算法④Lambda表达式)

目录

一:正则表达式(regex)                java.util.regex.pattern

1.概念,方法:

2.校验规则:

3.常见案例:

4.正则表达式在方法中的应用:

5.正则表达式爬取信息

二:Arrays类                                                java.util.Arrays

1.概述和常用API:

2.  Comparator比较器(自定义排序规则)

三:常见算法

1.选择排序:

 2.二分选择查找:

四:Lambda表达式

1.概述和基本使用

2.  实战-简化常见函数式接口

3. Lambda表达式的省略规则


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 

一:正则表达式(regex)                java.util.regex.pattern

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 

1.概念,方法:

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

              ·  方法:  字符串对象提供了匹配正则表达式的方法, 判断是否匹配正则表达式,匹配返回true,不匹配返回                                     public boolean matches​(String regex):

2.校验规则:

字符类(默认匹配一个字符)
[abc] 只能是a, b, 或c
[^abc] 除了a, b, c之外的任何字符
[a-zA-Z]   a到z A到Z,包括(范围)
[a-d[m-p]]a到d,或m通过p:([a-dm-p]联合)
[a-z&&[def]]d, e, 或f(交集)
[a-z&&[^bc]] a到z,除了b和c:([ad-z]减法)
[a-z&&[^m-p]] a到z,除了m到p:([a-lq-z]减法)

预定义的字符类(默认匹配一个字符)
.    任何字符
\d     一个数字: [0-9]
\D  非数字: [^0-9]
 \s  一个空白字符: [ \t\n\x0B\f\r]
\S非空白字符: [^\s]
\w     [a-zA-Z_0-9] 英文、数字、下划线
 \W     [^\w] 一个非单词字符

贪婪的量词(配合匹配多个字符)
X?X , 一次或根本不
X*X,零次或多次
X+X , 一次或多次
X { n }X,正好n次        
X  { n,  }X,至少n次
X {n,m}X,至少n但不超过m次

3.常见案例:

  1. public static void main(String[] args) {
  2. Scanner sc = new Scanner(System.in);
  3. System.out.println("请输入您注册的手机号:");
  4. String format = sc.next();
  5. //1. 手机号码
  6. if (format.matches("1[3-9]\\d{9}")) { }
  7. //2. 邮箱号码
  8. /* 判断邮箱格式是否正确 3268847878@qq.com
  9. 判断邮箱格式是否正确 3268847dsda878@163.com
  10. 判断邮箱格式是否正确 3268847dsda878@pci.com.cn*/
  11. if (format.matches("\\d{1,12}@[a-zA-Z0-9]{2,3}(\\.[a-zA-Z0-9]{2,3}){1,2}")) { }
  12. //3. 座机号码 判断座机式是否正确 027-3572457 0273572457
  13. if (format.matches("0\\d{2,5}\\-?\\d{6,10}"));
  14. //4. 金额格式 99 0.5 99.5 019 √ 0.3.3 ×
  15. if (money.matches("0?\\d{1,20}| 0\\.\\d{1,2}|0?\\d{1,20}\\.\\d{1,2}"))
  16. }

4.正则表达式在方法中的应用:

方法名

说明

 public String replaceAll(String regex,String newStr)

按照正则表达式匹配的内容进行替换

public String[] split(String regex):

按正则表达式规则分割字符串,返回一个字符串数组。

  1. public static void main(String[] args) {
  2. String names = "库里dhdfhdf342麦科勒姆43fdffdfbjdfaf特雷杨";
  3. String[] arrs=names.split("\\w+");
  4. for (int i = 0; i < arrs.length; i++) {
  5. System.out.println(arrs[i]);
  6. }
  7. String name22=names.replaceAll("\\w+"," ");
  8. System.out.println(name22);
  9. }

5.正则表达式爬取信息

  1. // 需求:从上面的内容中爬取出 电话号码和邮箱。
  2. public static void main(String[] args) {
  3. String rs = "来黑马程序学习Java,电话020-43422424,或者联系邮箱" +
  4. "itcast@itcast.cn,电话18762832633,0203232323" +
  5. "邮箱bozai@itcast.cn,400-100-3233 ,4001003232";
  6. // 1、定义爬取规则,字符串形式
  7. String regex = "(\\w{1,30}@[a-zA-Z0-9]{2,20}(\\.[a-zA-Z0-9]{2,20}){1,2})|(1[3-9]\\d{9})" +
  8. "|(0\\d{2,6}-?\\d{5,20})|(400-?\\d{3,9}-?\\d{3,9})";
  9. // 2、把这个爬取规则编译成匹配对象。
  10. Pattern pat=Pattern.compile(regex);
  11. // 3、得到一个内容匹配器对象
  12. Matcher mat= pat.matcher(rs);
  13. // 4、开始找了
  14. while (matcher.find()) {
  15. String rs1 = matcher.group();
  16. System.out.println(rs1);
  17. }
  18. }

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 

二:Arrays类                                                java.util.Arrays

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 

1.概述和常用API:

                        概述:数组操作工具类,专门用于操作数组元素的

                      

Arrays类的常用API

方法名

说明

public static String toString​(类型[] a)

返回数组的内容(字符串形式)

public static void sort​(类型[] a)

对数组进行默认升序排序

public static <T> void sort​(类型[] a, Comparator<? super T> c)

使用比较器对象自定义排序

public static int binarySearch​(int[] a, int key)

二分搜索数组中的数据,存在返回索引,不存在返回-1

  1. public static void main(String[] args) {
  2. int[] arr = {10, 40, 20, 30};
  3. // 1、返回数组内容的 toString(数组)
  4. String rs = Arrays.toString(arr);
  5. System.out.println(rs);
  6. // 2、排序的API(默认自动对数组元素进行升序排序)
  7. Arrays.sort(arr);
  8. System.out.println(Arrays.toString(arr));
  9. // 3、二分搜索技术(前提数组必须排好序才支持,否则出bug)
  10. int index = Arrays.binarySearch(arr, 30);
  11. System.out.println(index);
  12. // 返回不存在元素的规律: - (应该插入的位置索引 + 1)
  13. int index2 = Arrays.binarySearch(arr, 25);
  14. System.out.println(index2);
  15. }

2.  Comparator比较器(自定义排序规则)

public   static   <T>  void   sort  ​(  类型[  ] a,   Comparator<? super T> c)

使用比较器对象自定义排序

设置Comparator接口对应的比较器对象,来定制比较规则。
如果认为左边数据 大于 右边数据返回正整数
如果认为左边数据 小于 右边数据 返回负整数
如果认为左边数据  等于 右边数据 返回0

  1. public static void main(String[] args) {
  2. // stude是创建的类,这里不方便展示,student中重写了toString方法
  3. //需求:降序排序!(自定义比较器对象,只能支持引用类型的排序!!)
  4. student[] arrs = new student[3];
  5. arrs[0] = new student("库里", 20, 191.2);
  6. arrs[1] = new student("汤普森", 30, 195.9);
  7. arrs[2] = new student("格林", 28, 198.2);
  8. //排序前打印,需要在子类中重写toString方法
  9. System.out.println(Arrays.toString(arrs));
  10. /*
  11. 参数一:被排序的数组 必须是引用类型的元素
  12. 参数二:匿名内部类对象,代表了一个比较器对象。
  13. */
  14. Arrays.sort(arrs, new Comparator<student>() {
  15. @Override
  16. public int compare(student o1, student o2) {
  17. //自己指定规则
  18. return -(o1.getAge() - o2.getAge());//升序
  19. /*return -(o1.getAge() - o2.getAge()); 降序
  20. 如果这里比较浮点型,需要调用 compare API
  21. return Double.compare(o1.getHeight(), o2.getHeight());*/
  22. }
  23. });
  24. System.out.println(Arrays.toString(arrs));//排序后打印
  25. }

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 

三:常见算法

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 

1.选择排序:

1

  1. public static void main(String[] args) {
  2. Integer[] arr = {5, 1, 3, 2, 10, 9, 30};
  3. //定义一个循环控制选择几轮: arr.length - 1
  4. for (int i = 0; i < arr.length - 1; i++)
  5. {
  6. // 定义内部循环,控制选择几次
  7. for (int j = i + 1; j < arr.length; j++) {
  8. if (arr[i] > arr[j]) {
  9. int temp;
  10. temp = arr[i];
  11. arr[i] = arr[j];
  12. arr[j] = temp; } }
  13. }
  14. System.out.println(Arrays.toString(arr));
  15. }

 2.二分选择查找:

  1. public static int binarySearch(int[] arr, int data){
  2. // 1、定义左边位置 和 右边位置
  3. int left = 0;
  4. int right = arr.length - 1;
  5. // 2、开始循环,折半查询。
  6. while (left <= right){
  7. // 取中间索引
  8. int middleIndex = (left + right) / 2;
  9. // 3、判断当前中间位置的元素和要找的元素的大小情况
  10. if(data > arr[middleIndex]) {
  11. // 往右边找,左位置更新为 = 中间索引+1
  12. left = middleIndex + 1;
  13. }else if(data < arr[middleIndex]) {
  14. // 往左边找,右边位置 = 中间索引 - 1
  15. right = middleIndex - 1;
  16. }else {
  17. return middleIndex;
  18. }
  19. }
  20. return -1; // 查无此元素
  21. }

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 

四:Lambda表达式

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 

1.概述和基本使用

  1. public class curry {
  2. public static void main(String[] args) {
  3. //1.标准匿名内部类
  4. swimmg s = new swimmg() {
  5. @Override
  6. public void run() {
  7. System.out.println("库里跑的很快~");
  8. }
  9. };//go(s);
  10. //2.初步简化
  11. swimmg s1 = () -> {
  12. System.out.println("汤普森跑的很快~~");
  13. }; //go(s1);
  14. //3. 最终简化
  15. go(() -> {
  16. System.out.println("格林跑的很快~~");
  17. });
  18. }
  19. public static void go(swimmg s) {
  20. System.out.println("开始~");
  21. s.run();
  22. System.out.println("结束~");
  23. }
  24. @FunctionalInterface // 一旦加上这个注解必须是函数式接口,里面只能有一个抽象方法
  25. abstract interface swimmg {
  26. public abstract void run();
  27. }
  28. }

2.  实战-简化常见函数式接口

  1. package Test;
  2. import java.util.Arrays;
  3. import java.util.Comparator;
  4. //简化 compare 自定义排序规则
  5. public class curry {
  6. public static void main(String[] args) {
  7. Integer[] ages1 = {34, 12, 42, 23};
  8. //第一步
  9. Arrays.sort(ages1, new Comparator<Integer>() {
  10. @Override
  11. public int compare(Integer o1, Integer o2) {
  12. return o2 - o1; // 降序
  13. }
  14. });
  15. //第二步
  16. Arrays.sort(ages1, (Integer o1, Integer o2) -> {
  17. return o2 - o1; // 降序
  18. });
  19. //第三步
  20. Arrays.sort(ages1, (o1, o2) -> {
  21. return o2 - o1;
  22. });
  23. //第四步
  24. Arrays.sort(ages1, (o1, o2) -> o2 - o1);
  25. }
  26. }

3. Lambda表达式的省略规则

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

闽ICP备14008679号