day8-java基础(正则表达式、date类型、包装类)
1. Date 日期
千万别写错: Data 数据
主要是在 java.util.Date 包
另外还有一个 java.sql.Date 包,暂时不用。
初始化的时候:new Date() 可以获取当下的时间。
getTime() 获取从 1970年1月1日到现在为止的毫秒值,类型 long
toString() 主要是将 Date 对象转换为字符串。
2. DateFormat 日期格式转换器
java.text.Format
constant 常量
final 最终值
3. SimpleDateFormat
java.text.SimpleDateFormat
@Test
public void test(){
// dateFn();
// dateFormatFn();
// dateFormatFn2();
dateFormatFn3();
}
public void dateFormatFn3(){
String str = DateUtil.getDate(new Date());
System.out.println(str);
}
public void dateFormatFn2(){
// 1. 设置格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH点mm分ss秒");
// 2. 创建 Date
Date date = new Date();
// 3. 如果子类中没有对应可用的方法,可以直接去父类中查找使用
String dateStr = sdf.format(date);
System.out.println(dateStr);
}
public void dateFormatFn(){
// 1. 创建 Date
Date date = new Date();
// 2. 创建 DateFomat
// 不支持直接 new
// DateFormat df = new DateFormat();
DateFormat df = DateFormat.getInstance();
String dateStr = df.format(date);
// 18-9-12 上午11:26
System.out.println(dateStr);
}
public void dateFn(){
Date date = new Date();
// Wed Sep 12 11:15:20 CST 2018
System.out.println(date);
// 获取从 1970-1-1 到现在的毫秒值
long date2 = date.getTime();
// 15367 2221 2946
System.out.println(date2);
}
}
封装类:将日期转换成字符串
public class DateUtil {
public static String getDate(Date date){
if(date != null){
// 1. 设置格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH点mm分ss秒");
// 2. 如果子类中没有对应可用的方法,可以直接去父类中查找使用
return sdf.format(date);
}
return null;
}
}
求自己活了多少天了
public class Demo2 {
// add(int field, int amount):根据日历规则,为已给定的日历字段增加或者减少时间量。
// Adds or subtracts 增加或者减少 the specified 指定的 amount of time 时间量
// to the given calendar field, 已经给出来的日历字段
// based on the calendar's rules. 基于日历规则
// 注意点中重点: 西方月份定义:0-11,星期的定义:日-六
// 1. 求自己已经活了多少天了? XX 岁 XX 个月大 零 XX 天
// 2. 求距离 2020-8-8日还有多少天? 高考
@Test
public void test(){
// CalendarFn1();
// CalendarFn2();
// CalendarFn3();
tiFn();
}
// 1. 求自己已经活了多少天了? XX 岁 XX 个月大 零 XX 天
public void tiFn(){
// 1. 获取当前的时间对应的天数
Calendar currentDate = Calendar.getInstance();
Calendar birthDate = Calendar.getInstance();
// 2. 获取出生时对应的天数
// 设置出生日期:1999-8-8 2018-4-12 月份的公式:(12 + 当前月份 - 出生时月份) yyyy-MM-dd
birthDate.set(Calendar.YEAR, 1999);
birthDate.set(Calendar.MONTH, 8);
birthDate.set(Calendar.DATE, 8);
// 3. 减法
// 年份
int cYear = currentDate.get(Calendar.YEAR);
int mYear = birthDate.get(Calendar.YEAR);
// 总年份
int totalYear = cYear - mYear;
// 月份
int cMonth = currentDate.get(Calendar.MONTH);
int mMonth = birthDate.get(Calendar.MONTH);
// 总月份
// int totalMonth = (12 + cMonth - mMonth) + (cYear - mYear)*12 - 12;
int totalMonth = (12 + cMonth - mMonth) + totalYear * 12 - 12;
// 获取当前的天数
int cDate = currentDate.get(Calendar.DATE);
int mDate = birthDate.get(Calendar.DATE);
// 总天数
// int totalDay = ((12 + cMonth - mMonth) + (cYear - mYear)*12 - 12) * 30;
int totalDay = totalMonth * 30;
System.out.println("到现在为止,活了"+ totalDay +"天了");
}
public void CalendarFn3(){
// 创建 calendar 实例
Calendar c = Calendar.getInstance();
// 2088-10-12
c.set(Calendar.YEAR, 2088);
c.set(Calendar.MONTH, 10);
c.set(Calendar.DATE, 12);
System.out.println(c);
}
public void CalendarFn2(){
// 创建 calendar 实例
Calendar c = Calendar.getInstance();
// 2018-9-12 --> 17
c.add(Calendar.DATE, 5);
// 单独获取 c 则是全部的数据
// 可以通过指定的 DAY_OF_MONTH 字段来获取日的数据。
System.out.println(c.get(Calendar.DAY_OF_MONTH));
}
public void CalendarFn1(){
// 创建 calendar 实例
Calendar c = Calendar.getInstance();
// 获取年份
int year = c.get(Calendar.YEAR);
System.out.println(year);
// 这个月的第几周
System.out.println("这个月:" + c.get(Calendar.WEEK_OF_MONTH));
// 今年的第几周
System.out.println("今年:" + c.get(Calendar.WEEK_OF_YEAR));
}
public void hello() throws Exception{
// 1. 设置一个日期格式
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
// 2. 设置出生日期和当前日期
Date firstDate = format.parse("1999-8-8");
Date endDate = format.parse("2018-9-12");
// 3. 初始化 Calendar 对象
Calendar calendar = Calendar.getInstance();
// 4. 将出生日期加入到 Calendar 实例中
calendar.setTime(firstDate);
// 5. 设置旗标值,用于循环迭加
int cnt = 0;
// 6. compareTo() 接收两个 Calendar 对象值
// 将传入的时间,直接转换成毫秒值(从 1970-1-1开始) 然后可以进行比较
// 如果两个值相减时得到 0 则时同一时间,否则就是两者之差
// 如果直接采用这种方式,性能非常不好
while(calendar.getTime().compareTo(endDate) != 0) {
// 每次给开始时间去加1天(下面的1单位是天),直到天数加上来等于给定的结束时间为止,
// 循环将不再成立,结束循环
calendar.add(Calendar.DATE, 1);
cnt++;
}
System.out.println("您活了:" + cnt + "天");
}
}
4.正则表达式
下面出现的 X 代表的是随便一个字符。
1. X:要求必须匹配指定的字符。 a --> "a"
2. \:代表 \ 斜杠。
3. \t:相当于 tab 键,制表符。
4. \n:相当于回车键,换行。
5. \r:相当于回车键,换行。
6. [abc]:接收的内容,只能是指定字符中之一。
7. [^abc]:接收的内容,是除了指定的其他所有值。
8. [a-zA-Z]:指的是全部大小写字母。
9. [0-9]:指所有的数字。
10.[a-zA-Z0-9]:指的是所有的字母和数字。
1. 用小实心圆点 . 来表示所有的字符。 . 但书写的时候需要 \.
12. \d:指 0-9 的数字。
13. \w:指的是 [a-zA-Z0-9_]中的值。
14. ^ 开头,
15. \b:单词边界。 \b[abc]\b 指的是 a、b、c 三个字母左右两边的值都是 [a-zA-Z0-9] 范围的。
16. X?:出现一次或者一次都没有。
17. X*:出现零次或者多次。
18. X+:出现一次或者多次。
19. X{n}:恰好出现 n 次。
20. X{n,}:至少出现 n 次。
21. X{n, m}:至少出现 n 次,但不超过 m 次。
验证邮箱1:
public void email(){
// String email = "zsfz_053@126.com";
// String regrex = "[a-zA-Z_0-9]+@[a-zA-Z0-9]+(\\.[a-zA-Z_0-9]+)";
String email = "hello@sina.com.cn";
String regrex = "\\w+@\\w+(\\.\\w+)+";
System.out.println(email.matches(regrex));
}
验证邮箱2:
public void regrex(){
String email = "12345-6@qq.com";
String regrex = "[\\w-_]{6,18}@[\\w]*\\.[comn]*";
boolean b = email.matches(regrex);
System.out.println(b);
};
5.包装类
包装类
我们以前用的 int、char、double、float、boolean、short、byte 等都是基本数据类型。
在 Java 开发中尽量少用基本数据类型,多用包装类型。
针对基本数据类型进行升级,Java 提供多个包装类:
Integer、Character、Double、Float、Boolean、Short、Byte,引用数据类型,有内存地址。
包装类型,可以让开发者以面向对象的思维来操作,而且提供了很多的方法来实现功能。
转换方法:
1. compareTo(Integer anotherInteger):将两个 Integer 值来做运算(减法)
2. parseInt(String s):将 String 转 int,字符串中只能是数值才能转。
3. intValue():将 Integer 以 int 类型返回。
4. valueOf(int):将 int 转成 Integer。
5. valueOf(String):将 String 转成 Integer。
比较:
max(int a, int b):返回两者中最大值。
min(int a, int b):返回两者中最小值。
6.math()方法
public class Demo {
@Test
public void test(){
// 1. 四舍五入
System.out.println(Math.round(3.17));
// 2. 向上取整
System.out.println(Math.ceil(3.24));
// 3. 向下取整
System.out.println(Math.floor(3.84));
// 4. 最大值
System.out.println(Math.max(5, 6));
// 5. 最小值
System.out.println(Math.min(5, 6));
// 6. 绝对值
System.out.println(Math.abs(-7));
System.out.println(Math.abs(-7.34));
// 7. xx的多少次幂
System.out.println(Math.pow(5, 6));
// 8. 随机数:0.0-1.0
System.out.println(Math.random());
}
}
7.Arrays数组
public class Demo {
@Test
public void test() {
// 找到班里考试分数最低的三个
int[] aa = {73, 97, 24, 33, 65, 45, 99};
// 排序
Arrays.sort(aa);
// 新建一个数组存储值
int[] i = new int[3];
for (int j = 0; j < i.length; j++) {
i[j] = aa[j];
}
System.out.println(Arrays.toString(i));
}
public void ArraysFn() {
// sort:排序(小到大)
int[] aa = { 23, 33, 5, 12, 88, 34, 25 };
// Arrays.sort(aa);
for (int i : aa) {
System.out.print(i + ",");
}
// toString() 将数据以字符串返回
String str = Arrays.toString(aa);
System.out.println(str);
// 二分法: return index of the search key, 返回要找的内容对应下标值
int index = Arrays.binarySearch(aa, 12);
System.out.println(index);
}
}
8.BigDecimal
public class BigDecimalTest {
@Test
public void test(){
System.out.println(0.09 + 0.02222222); // 0.11
System.out.println(1.0 - 0.44); // 0.56
System.out.println(1.304 * 100); // 130.4
System.out.println(1.304 / 100); // 0.013040000000000001
BigDecimal a = new BigDecimal(1.0);
BigDecimal b = new BigDecimal(0.44);
// BigDecimal c = a.add(b);
BigDecimal c = a.subtract(b);
System.out.println(1.0 + 0.44);
System.out.println(c);
}
}
9.list集合
public class Demo {
// List 集合
// 相当于一个容器,跟数组是类似的,用于存储数据。
// 数组不能动态变化长度,来添加数据,但集合可以。
// List 接口
// 1. 存储的值是有序排列的。
// 2. 值是允许重复的。
// 3. 可以通过索引寻找。
// 需要掌握的实现类:ArrayList、LinkedList
// 增加数据:
// add() 在尾部追加
// add(index, element) 指定位置加
// 删除删除
// remove(index) 通过下标值来删除
// remove(Object) 直接删掉指定对象
// 替换数据
// set(index, element) 在指定的位置设置内容
// 查找数据
// get(index) 根据下标值获取对象
@Test
public void test() {
listIteratorFn();
}
public void listIteratorFn(){
// 创建一个 ArrayList 对象
ArrayList<String> arrList = new ArrayList<>();
// 添加值
arrList.add("cuihua");
arrList.add("chunhua");
arrList.add("hehua");
// 获取 ListIterator 迭加器,访问数据。
ListIterator<String> itStr = arrList.listIterator();
// hasNext() 判断下面是否有数据,指针还没动的时候
while (itStr.hasNext()) {
// 就让指针移动,然后获取对应的值到 迭加器 中。
String aa = itStr.next();
// 看是否最后一个值,如果是的话,我想追加一个新值
if ("chunhua".equals(aa)) {
// 将一个新值,加到 叠加器 中
itStr.add("hello");
}
}
System.out.println(arrList.toString());
}
}