正则表达式:
(1)按照正确的规则组成的一个字符串。
(2)规则:
A:基本字符
x 字符x
\\ 反斜线字符
\r 回车符
\n 换行符
B:字符类
[abc] a、b或 c
[^abc] 任何字符,除了 a、b 或 c
[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内
[0-9] 数字0-9
C:预定义字符类
. 任何字符
\d 数字:[0-9]
\w 单词字符:[a-zA-Z_0-9]
在正则表达式里面只有这些字符被称为单词字符。
D:边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界(也就是说这里不能是单词字符)
hello;haha xixi?
E:Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
(3)常见功能:
A:判断功能
String类的matches()方法
B:分割功能
String类的split()方法
C:替换功能
String类的replaceAll()方法
D:获取功能
Pattern和Matcher类的组合使用。
find()和group()
案例:
import java.util.Scanner;
/*
* 正则表达式:符合一定规则的字符串。
*
* 需求:
* 校验QQ号码:
* A:长度是5-15位
* B:不能以0开头
* C:只能是数字字符
*/
public class RegexDemo {
public static void main(String[] args) {
// 封装键盘录入
Scanner sc = new Scanner(System.in);
// 键盘输入数据
System.out.println("请输入QQ号码:");
String qq = sc.nextLine();
boolean flag = checkQQ(qq);
System.out.println(flag);
// 用正则表达式改进版
boolean flag2 = checkQQ2(qq);
System.out.println(flag2);
}
// 用正则表达式改进
public static boolean checkQQ2(String qq) {
// 定义一个规则
// String regex = "[1-9][0-9]{4,14}";
// 判断
// public boolean matches(String regex)
// boolean flag = qq.matches(regex);
// return flag;
// return qq.matches("[1-9][0-9]{4,14}");
return qq.matches("[1-9]\\d{4,14}");
}
// 写一个功能完成该校验
// 返回值类型:boolean
// 参数列表:String qq
public static boolean checkQQ(String qq) {
boolean flag = true;
// 长度是5-15位
if (qq.length() >= 5 && qq.length() <= 15) {
// 不能以0开头
if (!qq.startsWith("0")) {
// 只能是数字字符
// 把字符串转成字符数组,遍历字符数组,获取到每一个字符,然后判断是否是数字字符,如果不是,直接flag=false,break。
char[] chs = qq.toCharArray();
for (int x = 0; x < chs.length; x++) {
char ch = chs[x];
if (!(ch >= '0' && ch <= '9')) {
flag = false;
break;
}
}
} else {
flag = false;
}
} else {
flag = false;
}
return flag;
}
}
System类:
(1)提供了一些有用的类字段或者方法,不能被实例化。
(2)成员方法:
exit():终止jvm。
currentTimeMillis():获取当前系统时间,将来可用于测试程序运行时间。
5:Date,DateFormat,Calendar
(1)Date:日期类。
A:构造方法
Date()
Date(long time)
B:成员方法
getTime()
setTime()
C:日期和毫秒值的转换:
如何从日期到毫秒值
getTime()
如何从毫秒值到日期
构造方法
setTime()
(2)DateFormat对日期进行格式化和解析
A:Date -- String
String format(Date d):把日期格式化成一个字符串。
yyyy-MM-dd HH:mm:ss
B:String -- Date
Date parse(String s):把字符串解析成一个日期。
注意:要求格式和字符串的数据要对应。
(3)Calendar:日历类
A:通过get方法获取所有日历字段对应的值。
int get(int field)
B:通过set方法设置日历对象的年月日
set(int year,int month,int date)
C:通过add方法加或者减去指定日历字段的时间
add(int field,int number)
案例:
import java.util.Calendar;
import java.util.Scanner;
/*
* Calendar:日历类。把每个日历字段都可以单独获取。
*
* 功能:
* public int get(int field):根据给定的日历字段返回对应的数值。
* public final void set(int year,int month,int date):设置日历的年月日
* public void add(int field,int amount)根据日历的规则,为给定的日历字段添加或减去指定的时间量
*/
public class CalendarDemo {
public static void main(String[] args) {
Calendar rightNow = Calendar.getInstance(); // 其实右边是一个子类对象。这里用到了多态
// rightNow.set(2012, 8, 8);
rightNow.add(Calendar.YEAR, 3);
rightNow.add(Calendar.DATE, -5);
// 获取年
// public int get(int field):根据给定的日历字段返回对应的数值。
// public static final int YEAR
int year = rightNow.get(Calendar.YEAR);
System.out.println(year);
innt month = rightNow.get(Calendar.MONTH);
System.out.println(month + 1);
int date = rightNow.get(Calendar.DATE);
System.out.println(date);
// 需求:我给你任意一个年份,请告诉我2月份有多少天?
Calendar c = Calendar.getInstance(); // 获取当前日历时间
Scanner sc = new Scanner(System.in);
System.out.println("请输入年份:");
int y = sc.nextInt();
c.set(y, 2, 1);// xx年的3月1日。
c.add(Calendar.DATE, -1);
int d = c.get(Calendar.DATE);
System.out.println(d);
}
}