目录
一、包装类
1、包装类的概念
其实就是8种基本数据类型对应的引用类型。
基本数据类型 | 引用数据类型 |
byte | Byte |
short | Short |
int | Integer |
long | Long |
char | Character |
float | Float |
double | Double |
boolean | Boolean |
2、为什么提供包装类?
Java为了实现一切皆对象,为8种基本类型提供了对应的引用类型。
后面的集合和泛型其实也只能支持包装类型,不支持基本数据类型。
自动装箱:基本类型的数据和变量可以直接赋值给包装类型的变量。
自动拆箱:包装类型的变量可以直接赋值给基本数据类型的变量。
3、包装类的特有功能
包装类的变量的默认值可以是null,容错率更高。
可以把基本类型的数据转换成字符串类型(用处不大)
可以把字符串类型的数值转换成真实的数据类型(真的很有用)
二、正则表达式
1、正则表达式概述、初体验
1)、正则表达式的概念
正则表达式可以用一些规定的字符来制定规则,并用来校验数据格式的合法性。
2)、正则表达式的案例
需求:假如现在要求校验一个qq号码是否正确,6位及20位之内,必须全部是数字 。
代码:
public class RegexDemo1 {
public static void main(String[] args) {
System.out.println(checkQQ("251425998"));
System.out.println(checkQQ("2514259a98"));
System.out.println(checkQQ(null));
System.out.println(checkQQ("2344"));
System.out.println("-------------------------");
System.out.println(checkQQ2("251425998"));
System.out.println(checkQQ2("2514259a98"));
System.out.println(checkQQ2(null));
System.out.println(checkQQ2("2344"));
}
public static boolean checkQQ2(String qq){
return qq != null && qq.matches("\\d{6,20}");
}
public static boolean checkQQ(String qq){
// 1、判断qq号码的长度是否满足要求
if(qq == null || qq.length() < 6 || qq.length() > 20 ) {
return false;
}
// 2、判断qq中是否全部是数字,不是返回false
// 251425a87
for (int i = 0; i < qq.length(); i++) {
// 获取每位字符
char ch = qq.charAt(i);
// 判断这个字符是否不是数字,不是数字直接返回false
if(ch < '0' || ch > '9') {
return false;
}
}
return true;
}
}
结果:
2、正则表达式的匹配规则
1)、字符串对象提供了匹配正则表达式的方法
public boolean matches(String regex): 判断是否匹配正则表达式,匹配返回true,不匹配返回false。
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
[a-z&&[^m-p]] a到z,除了m到p:([a-lq-z]减法)
3)、预定义的字符类(默认匹配一个字符)
. 任何字符
\d 一个数字: [0-9]
\D 非数字: [^0-9]
\s 一个空白字符: [ \t\n\x0B\f\r]
\S 非空白字符: [^\s]
\w [a-zA-Z_0-9] 英文、数字、下划线
\W [^\w] 一个非单词字符
4)、贪婪的量词(配合匹配多个字符)
X? X , 一次或根本不
X* X,零次或多次
X+ X , 一次或多次
X {n} X,正好n次
X {n, } X,至少n次
X {n,m} X,至少n但不超过m次
3、正则表达式的常见案例
1)、需求
请编写程序模拟用户输入手机号码、验证格式正确,并给出提示,直到格式输入正确为止。
请编写程序模拟用户输入邮箱号码、验证格式正确,并给出提示,直到格式输入正确为止。
请编写程序模拟用户输入电话号码、验证格式正确,并给出提示,直到格式输入正确为止。
2)、分析
定义方法,接收用户输入的数据,使用正则表达式完成检验,并给出提示。
3)、代码
public class RegexTest3 {
public static void main(String[] args) {
//目标: 效验 手机号码 邮箱 电话号码
//mobilePhone();
//mailBox();
phone();
}
//电话号码校验
public static void phone(){
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("请您输入您的电话号码:");
String s = sc.next();
if(s.matches("0\\d{2,6}-?\\d{5,20}")){
System.out.println("电话号码校验成功");
break;
}else{
System.out.println("您输入的格式错误!");
}
}
}
//邮箱校验
public static void mailBox(){
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("请您输入您邮箱的号码:");
String s = sc.next();
if(s.matches("[a-zA-Z0-9]{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 mobilePhone(){
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("请您输入您的手机号码:");
String s = sc.next();
if(s.matches("1[3-9]\\d{9,}")){
System.out.println("校验成功");
break;
}else{
System.out.println("您输入的格式错误!");
}
}
}
}
4)、结果
4、正则表达式在方法中的应用
1)、正则表达式在字符串方法中的使用
方法名 | 说明 |
public String replaceAll(String regex,String newStr) | 按照正则表达式匹配的内容进行替换 |
public String[] split(String regex): | 按照正则表达式匹配的内容进行分割字符串,反回一个字符串数组。 |
5、正则表达式爬取信息
1)、需求
正则表达式爬取信息
2)、代码
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 = "(0\\d{2,6}-?\\d{5,20})|([a-zA-Z0-9]{1,30}@[a-zA-Z0-9]{2,20}(\\.[a-zA-Z0-9]{2,20}){1,2})|" +
"(1[3-9]\\d{9,})|(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);
}
}
}
3)、结果
三、Arrays类
1、Arrays类概述,常用API
1)、Arrays类概述
数组操作工具类,专门用于操作数组元素的。
2)、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 |
2、Arrays类对于Comparator比较器的支持
1)、Arrays类的排序方法
方法名 | 说明 |
public static void sort(类型[] a) | 对数组进行默认升序排序 |
public static <T> void sort(类型[] a, Comparator<? super T> c) | 使用比较器对象自定义排序 |
2)、自定义排序规则
设置Comparator接口对应的比较器对象,来定制比较规则。
如果认为左边数据 大于 右边数据 返回正整数
如果认为左边数据 小于 右边数据 返回负整数
如果认为左边数据 等于 右边数据 返回0