Java 入门 32 包装类 正则表达式 Arrays类 Lambda表达式枚举
![](https://img2022.cnblogs.com/blog/1805814/202206/1805814-20220629112348120-1892240471.png)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.itheima.d5_integer; /** 目标:明白包装类的概念,并使用。 */ public class Test { public static void main(String[] args) { int a = 10; Integer a1 = 11; Integer a2 = a; // 自动装箱 System.out.println(a); System.out.println(a1); Integer it = 100; int it1 = it; // 自动拆箱 System.out.println(it1); double db = 99.5; Double db2 = db; // 自动装箱了 double db3 = db2; // 自动拆箱 System.out.println(db3); // int age = null; // 报错了! Integer age1 = null; Integer age2 = 0; System.out.println("-----------------"); // 1、包装类可以把基本类型的数据转换成字符串形式。(没啥用) Integer i3 = 23; String rs = i3.toString(); System.out.println(rs + 1); String rs1 = Integer.toString(i3); System.out.println(rs1 + 1); // 可以直接+字符串得到字符串类型 String rs2 = i3 + ""; System.out.println(rs2 + 1); System.out.println("-----------------"); String number = "23"; //转换成整数 // int age = Integer.parseInt(number); int age = Integer.valueOf(number); System.out.println(age + 1); String number1 = "99.9"; //转换成小数 // double score = Double.parseDouble(number1); double score = Double.valueOf(number1); System.out.println(score + 0.1); } }
eg:1
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.itheima.d6_regex; /** 目标:全面、深入学习正则表达式的规则 */ public class RegexDemo02 { public static void main(String[] args) { //public boolean matches(String regex):判断是否与正则表达式匹配,匹配返回true // 只能是 a b c System.out.println("a".matches("[abc]")); // true System.out.println("z".matches("[abc]")); // false // 不能出现a b c System.out.println("a".matches("[^abc]")); // false System.out.println("z".matches("[^abc]")); // true System.out.println("a".matches("\\d")); // false System.out.println("3".matches("\\d")); // true System.out.println("333".matches("\\d")); // false System.out.println("z".matches("\\w")); // true System.out.println("2".matches("\\w")); // true System.out.println("21".matches("\\w")); // false System.out.println("你".matches("\\w")); //false System.out.println("你".matches("\\W")); // true System.out.println("---------------------------------"); // 以上正则匹配只能校验单个字符。 // 校验密码 // 必须是数字 字母 下划线 至少 6位 System.out.println("2442fsfsf".matches("\\w{6,}")); System.out.println("244f".matches("\\w{6,}")); // 验证码 必须是数字和字符 必须是4位 System.out.println("23dF".matches("[a-zA-Z0-9]{4}")); System.out.println("23_F".matches("[a-zA-Z0-9]{4}")); System.out.println("23dF".matches("[\\w&&[^_]]{4}")); System.out.println("23_F".matches("[\\w&&[^_]]{4}")); } }
eg:2
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.itheima.d6_regex; import java.util.Arrays; import java.util.Scanner; public class RegexTest3 { public static void main(String[] args) { // 目标:校验 手机号码 邮箱 电话号码 // checkPhone(); // checkEmail(); // checkTel(); // 同学可以完成校验金额是否格式金额: 99 0.5 99.5 019 | 0.3.3 int[] arr = {10, 4, 5,3, 4,6, 2}; System.out.println(Arrays.binarySearch(arr, 2)); } public static void checkTel(){ Scanner sc = new Scanner(System.in); while (true) { System.out.println("请您输入您的电话号码:"); String tel = sc.next(); // 判断邮箱格式是否正确 027-3572457 0273572457 if(tel.matches("0\\d{2,6}-?\\d{5,20}")){ System.out.println("格式正确,注册完成!"); break; }else { System.out.println("格式有误!"); } } } public static void checkEmail(){ Scanner sc = new Scanner(System.in); while (true) { System.out.println("请您输入您的注册邮箱:"); String email = sc.next(); // 判断邮箱格式是否正确 3268847878@qq.com // 判断邮箱格式是否正确 3268847dsda878@163.com // 判断邮箱格式是否正确 3268847dsda878@pci.com.cn if(email.matches("\\w{1,30}@[a-zA-Z0-9]{2,20}(\\.[a-zA-Z0-9]{2,20}){1,2}")){ System.out.println("邮箱格式正确,注册完成!"); break; }else { System.out.println("格式有误!"); } } } public static void checkPhone(){ Scanner sc = new Scanner(System.in); while (true) { System.out.println("请您输入您的注册手机号码:"); String phone = sc.next(); // 判断手机号码的格式是否正确 if(phone.matches("1[3-9]\\d{9}")){ System.out.println("手机号码格式正确,注册完成!"); break; }else { System.out.println("格式有误!"); } } } }
eg:3
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
/** 目标:正则表达式在方法中的应用。 public String[] split(String regex): -- 按照正则表达式匹配的内容进行分割字符串,反回一个字符串数组。 public String replaceAll(String regex,String newStr) -- 按照正则表达式匹配的内容进行替换 */ public class RegexDemo04 { public static void main(String[] args) { String names = "小路dhdfhdf342蓉儿43fdffdfbjdfaf小何"; String[] arrs = names.split("\\w+"); for (int i = 0; i < arrs.length; i++) { System.out.println(arrs[i]); } String names2 = names.replaceAll("\\w+", " "); System.out.println(names2); } }
eg4:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.itheima.d6_regex; import java.util.regex.Matcher; import java.util.regex.Pattern; /** 拓展:正则表达式爬取信息中的内容。(了解) */ public class RegexDemo05 { public static void main(String[] args) { String rs = "来黑马程序学习Java,电话020-43422424,或者联系邮箱" + "itcast@itcast.cn,电话18762832633,0203232323" + "邮箱bozai@itcast.cn,400-100-3233 ,4001003232"; // 需求:从上面的内容中爬取出 电话号码和邮箱。 // 1、定义爬取规则,字符串形式 String regex = "(\\w{1,30}@[a-zA-Z0-9]{2,20}(\\.[a-zA-Z0-9]{2,20}){1,2})|(1[3-9]\\d{9})" + "|(0\\d{2,6}-?\\d{5,20})|(400-?\\d{3,9}-?\\d{3,9})"; // 2、把这个爬取规则编译成匹配对象。 Pattern pattern = Pattern.compile(regex); // 3、得到一个内容匹配器对象 Matcher matcher = pattern.matcher(rs); // 4、开始找了 while (matcher.find()) { String rs1 = matcher.group(); System.out.println(rs1); } } }
eg1: 升序
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.itheima.d7_arrays; import java.util.Arrays; public class ArraysDemo1 { public static void main(String[] args) { // 目标:学会使用Arrays类的常用API ,并理解其原理 int[] arr = {10, 2, 55, 23, 24, 100}; System.out.println(arr); // 1、返回数组内容的 toString(数组) // String rs = Arrays.toString(arr); // System.out.println(rs); System.out.println(Arrays.toString(arr)); // 2、排序的API(默认自动对数组元素进行升序排序) Arrays.sort(arr); System.out.println(Arrays.toString(arr)); // 3、二分搜索技术(前提数组必须排好序才支持,否则出bug) int index = Arrays.binarySearch(arr, 55); System.out.println(index); // 返回不存在元素的规律: - (应该插入的位置索引 + 1) int index2 = Arrays.binarySearch(arr, 22); System.out.println(index2); // 注意:数组如果么有排好序,可能会找不到存在的元素,从而出现bug!! int[] arr2 = {12, 36, 34, 25 , 13, 24, 234, 100}; System.out.println(Arrays.binarySearch(arr2 , 36)); } }
eg2: 降序
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.itheima.d7_arrays; import java.util.Arrays; import java.util.Comparator; public class ArraysDemo2 { public static void main(String[] args) { // 目标:自定义数组的排序规则:Comparator比较器对象。 // 1、Arrays的sort方法对于有值特性的数组是默认升序排序 int[] ages = {34, 12, 42, 23}; Arrays.sort(ages); System.out.println(Arrays.toString(ages)); // 2、需求:降序排序!(自定义比较器对象,只能支持引用类型的排序!!) Integer[] ages1 = {34, 12, 42, 23}; /** 参数一:被排序的数组 必须是引用类型的元素 参数二:匿名内部类对象,代表了一个比较器对象。 */ Arrays.sort(ages1, new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { // 指定比较规则。 // if(o1 > o2){ // return 1; // }else if(o1 < o2){ // return -1; // } // return 0; // return o1 - o2; // 默认升序 return o2 - o1; // 降序 } }); System.out.println(Arrays.toString(ages1)); System.out.println("-------------------------"); Student[] students = new Student[3]; students[0] = new Student("吴磊",23 , 175.5); students[1] = new Student("谢鑫",18 , 185.5); students[2] = new Student("王亮",20 , 195.5); System.out.println(Arrays.toString(students)); // Arrays.sort(students); // 直接运行奔溃 Arrays.sort(students, new Comparator<Student>() { @Override public int compare(Student o1, Student o2) { // 自己指定比较规则 // return o1.getAge() - o2.getAge(); // 按照年龄升序排序! // return o2.getAge() - o1.getAge(); // 按照年龄降序排序!! // return Double.compare(o1.getHeight(), o2.getHeight()); // 比较浮点型可以这样写 升序 return Double.compare(o2.getHeight(), o1.getHeight()); // 比较浮点型可以这样写 降序 } }); System.out.println(Arrays.toString(students)); } }
eg:3 应勇数据类型排序
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.itheima.d7_arrays; public class Student { private String name; private int age; private double height; public Student() { } public Student(String name, int age, double height) { this.name = name; this.age = age; this.height = height; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public double getHeight() { return height; } public void setHeight(double height) { this.height = height; } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + ", height=" + height + '}'; } }
选择排序实现
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.itheima.d8_sort_binarysearch; import java.util.Arrays; /** 目标:学会使用选择排序的方法对数组进行排序。 */ public class Test1 { public static void main(String[] args) { // 1、定义数组 int[] arr = {5, 1, 3, 2}; // 0 1 2 3 // 2、定义一个循环控制选择几轮: arr.length - 1 for (int i = 0; i < arr.length - 1; i++) { // i = 0 j = 1 2 3 // i = 1 j = 2 3 // i = 2 j = 3 // 3、定义内部循环,控制选择几次 for (int j = i + 1; j < arr.length; j++) { // 当前位:arr[i] // 如果有比当前位数据更小的,则交换 if(arr[i] > arr[j]) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } System.out.println(Arrays.toString(arr)); } }
二分排序 实现
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.itheima.d8_sort_binarysearch; /** 目标:理解二分搜索的原理并实现。 */ public class Test2 { public static void main(String[] args) { // 1、定义数组 int[] arr = {10, 14, 16, 25, 28, 30, 35, 88, 100}; // r // l // System.out.println(binarySearch(arr , 35)); System.out.println(binarySearch(arr , 350)); } /** * 二分查找算法的实现 * @param arr 排序的数组 * @param data 要找的数据 * @return 索引,如果元素不存在,直接返回-1 */ public static int binarySearch(int[] arr, int data){ // 1、定义左边位置 和 右边位置 int left = 0; int right = arr.length - 1; // 2、开始循环,折半查询。 while (left <= right){ // 取中间索引 int middleIndex = (left + right) / 2; // 3、判断当前中间位置的元素和要找的元素的大小情况 if(data > arr[middleIndex]) { // 往右边找,左位置更新为 = 中间索引+1 left = middleIndex + 1; }else if(data < arr[middleIndex]) { // 往左边找,右边位置 = 中间索引 - 1 right = middleIndex - 1; }else { return middleIndex; } } return -1; // 查无此元素 } }
用法
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.itheima.d9_lambda; public class LambdaDemo2 { public static void main(String[] args) { // 目标:学会使用Lambda的标准格式简化匿名内部类的代码形式 // 注意:Lambda只能简化接口中只有一个抽象方法的匿名内部类形式(函数式接口) // Swimming s1 = new Swimming() { // @Override // public void swim() { // System.out.println("老师游泳贼溜~~~~~"); // } // }; // Swimming s1 = () -> { // System.out.println("老师游泳贼溜~~~~~"); // }; Swimming s1 = () -> System.out.println("老师游泳贼溜~~~~~"); go(s1); System.out.println("---------------------"); // go(new Swimming() { // @Override // public void swim() { // System.out.println("学生游泳很开心~~~"); // } // }); // go(() ->{ // System.out.println("学生游泳很开心~~~"); // }); go(() -> System.out.println("学生游泳很开心~~~")); } public static void go(Swimming s){ System.out.println("开始。。。"); s.swim(); System.out.println("结束。。。"); } } @FunctionalInterface // 一旦加上这个注解必须是函数式接口,里面只能有一个抽象方法 interface Swimming{ void swim(); }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.itheima.d9_lambda; import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Arrays; import java.util.Comparator; public class LambdaDemo3 { public static void main(String[] args) { Integer[] ages1 = {34, 12, 42, 23}; /** 参数一:被排序的数组 必须是引用类型的元素 参数二:匿名内部类对象,代表了一个比较器对象。 */ // Arrays.sort(ages1, new Comparator<Integer>() { // @Override // public int compare(Integer o1, Integer o2) { // return o2 - o1; // 降序 // } // }); // Arrays.sort(ages1, (Integer o1, Integer o2) -> { // return o2 - o1; // 降序 // }); // Arrays.sort(ages1, ( o1, o2) -> { // return o2 - o1; // 降序 // }); Arrays.sort(ages1, ( o1, o2 ) -> o2 - o1 ); System.out.println(Arrays.toString(ages1)); System.out.println("---------------------------"); JFrame win = new JFrame("登录界面"); JButton btn = new JButton("我是一个很大的按钮"); // btn.addActionListener(new ActionListener() { // @Override // public void actionPerformed(ActionEvent e) { // System.out.println("有人点我,点我,点我!!"); // } // }); // btn.addActionListener((ActionEvent e) -> { // System.out.println("有人点我,点我,点我!!"); // }); // btn.addActionListener(( e) -> { // System.out.println("有人点我,点我,点我!!"); // }); // btn.addActionListener( e -> { // System.out.println("有人点我,点我,点我!!"); // }); btn.addActionListener( e -> System.out.println("有人点我,点我,点我!!") ); win.add(btn); win.setSize(400, 300); win.setVisible(true); } }