1 日期
1.1 Date
-
Date类: 日期时间类, 表示年, 月, 日, 小时, 分钟, 秒.
注意: 在使用中我们使用:java.util.Date类.
import java.util.Date;
public class DateDemo {
public static void main(String[] args) {
Date d = new Date();//得到当前日期
System.out.println(d);
//获取日期中的字段(年月日时分秒)
System.out.println(d.toLocaleString());//本地区域时间风格
}
}
1.2 SimpleDateFormat
- SimpleDateFormat: 日期的格式化类
- 功能:
- 格式化: Date类型转换为String类型: String format(Date date).
- 解析: String类型转换为Date类型: Date parse(String source).
- 简单类型的数据 -> 复杂类型的数据
import java.text.SimpleDateFormat;
import java.util.Date;
public class SimpleDateFormatDemo {
public static void main(String[] args) {
//格式化: 将Date对象转换成String
//Date对象 --->"2020-08-19 11:26:30"
Date d = new Date();
System.out.println(d);
//SimpleDateFormat类:format
SimpleDateFormat sdf = new SimpleDateFormat();
//指定日期的格式
//M表示月, m表示分钟
sdf.applyPattern("yyyy-MM-dd hh:mm:ss");
String sdate = sdf.format(d);
System.out.println(sdate);
}
}
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class SimpleDateFormatDemo2 {
public static void main(String[] args) throws ParseException {
//日期的解析:String ->Date
String s = "2020年08月19日 11时44分30秒";
SimpleDateFormat sdf = new SimpleDateFormat();
//需要在解析前,指定日期的格式
//才能从字符串中获取到对应的数据
sdf.applyPattern("yyyy年MM月dd日 hh时mm分ss秒");
//一旦出现ParseException异常,那么肯定是指定格式错了
Date d = sdf.parse(s);
System.out.println(d);
}
}
1.3 Calendar
- Calendar:日历类 : 主要用来对日期做相加减, 重新设置日期时间功能.
- Calendar本身是一个抽象类, 通过getInstance方法获取对象, 其底层创建的是Calendar的子类对象.
import java.util.Calendar;
public class CalendarDemo {
public static void main(String[] args) {
//获取到Calendar的子对象
//通过Cale操作当前日期
Calendar c =Calendar.getInstance();
System.out.println(c);
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH)+1;
int date = c.get(Calendar.DATE);
int hour = c.get(Calendar.HOUR);
int minute = c.get(Calendar.MINUTE);
int second = c.get(Calendar.SECOND);
System.out.println(year);
System.out.println(month);
System.out.println(date);
System.out.println(hour);
System.out.println(minute);
System.out.println(second);
//年份设置为2021年
c.set(Calendar.YEAR, 2021);
System.out.println(c.get(Calendar.YEAR));
}
}
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class CalendarDemo2 {
public static void main(String[] args) throws ParseException {
//给定一个日期字符串, 找到该前一周的日期
String endDate = "2020-08-19 14:59:50";
//需要一个Date, 但是目前只有String
//String -> Date SimpleDateFormat
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d = sdf.parse(endDate);
//结束日期设置为2020-08-19 23:59:59
Calendar c = Calendar.getInstance();
c.setTime(d);
c.set(Calendar.HOUR_OF_DAY,23);
c.set(Calendar.MINUTE,59);
c.set(Calendar.SECOND,59);
System.out.println(c.getTime());
//获取到一周前的时间
c.add(Calendar.SECOND, 1);
c.add(Calendar.DAY_OF_MONTH,-7);
System.out.println(c.getTime());
//得到一个开始时间 2020-08-13 00:00:00
String beginDate = "2020-08-12 14:59:50";
}
}
2 随机数
2.1 Math
- Math定义: Math 类包含用于执行数学运算的方法, 如初等指数、对数、平方根和三角函数等, 该类的方法都是static修饰的.
public class MathDemo {
public static void main(String[] args) {
//最大值
System.out.println(Math.max(99,22));
//最小值
System.out.println(Math.min(99,22));
//生成[0,1)之间的随机小数
System.out.println(Math.random());
//生成[0,100)之间的随机整数
System.out.println((int)(Math.random()*100));
}
}
2.2 Random
- Random定义: Random类用于生产一个伪随机数( 通过相同的种子, 产生的随机数是相同的 ), Math类的random方法底层使用的就是Random类的方式.
import java.util.Random;
public class RandomDemo {
public static void main(String[] args) {
Random r = new Random();
//指定[0, 100)之间的随机数
System.out.println(r.nextInt(100));
//随机获取A~Z之间的5个字母组成的字符串
//先生成65-90之间的随机数 0-25之间的随机数
StringBuilder sb =new StringBuilder(5);
for (int i=0;i<5;i++){
sb.append((char)(r.nextInt(26)+65));
}
System.out.println(sb);
}
}
2.3 UUID
- UUID定义: UUID表示通用唯一标识符 (Universally Unique Identifier) , 其算法通过电脑的网卡、当地时间、随机数等组合而成, 优点是真实的唯一性, 缺点是字符串太长了.
import java.util.UUID;
public class UUIDDemo {
public static void main(String[] args) {
//UUID
UUID uuid = UUID.randomUUID();
System.out.println(uuid);
//转成toString 拿到前5位
String suuid = UUID.randomUUID().toString().substring(0,5);
System.out.println(suuid);
}
}
3. 正则表达式
- 正则表达式定义: 正则表达式用来判断某一个字符串是不是符合某一种正确的规则, 在开发中通常用于判断操作、替换操作、分割操作等.
3.1 匹配规则一
public class REDemo {
public static void main(String[] args) {
//校验字符串是否匹配指定的规则
//正则表达式中需要使用到反斜线\
//反斜线在java中是转义符
System.out.println("\"\"");
System.out.println("1234567S".matches("\\d"));
//只能匹配一个字符
//符合ABC中其中一个字符
System.out.println("A".matches("[ABC]"));
//除了ABC以为的字母
System.out.println("S".matches("[^ABC]"));
//符合a-z A-Z 0-9的字符
System.out.println("2".matches("[a-zA-Z0-9]"));
//数字
System.out.println("2".matches("\\d"));
//非数字
System.out.println("2".matches("\\D"));
//字母,数字,下划线
System.out.println("_".matches("\\w"));
//非字母,数字,下划线
System.out.println("_".matches("\\W"));
//空白字符
System.out.println(" ".matches("\\s"));
//非空白字符
System.out.println(" ".matches("\\S"));
}
}
3.2 匹配规则二
4总结
4.1 StringBuilder的常用方法和作用
StringBuilder常用方法:
- append: 追加, 在字符串后面加上,非静态方法.
- StringBuilder(int capacity): 指定容量.
- StringBuilder deleteCharAt(int index):删除指定索引位置的字符
StringBuilder作用: 解决多个字符串拼接低性能的问题. 特别是在循环中连接字符时.
4.2 如果理解StringBuilder中的容量
StringBuilder容量: 当我们使用StringBuilder的时候,默认容量位16,但是我们不必担心容量不够得问题, 因为当容量不够的时候的会自动扩容,以16的倍数.
4.3 String、StringBuilder、StringBuffer三者的区别
String: 是不可变字符串, 比较适合连接几个字符串的时候.
StringBuilder和StringBuffer: 都是可变的字符串, 本质是一个char[ ].
StringBuilder: 线程不安去, 但是性能比较高.
StringBuffer: 线程安全, 但是性能比较低.
两个都可以用来拼接多个字符串.
4.4 日期和String的相互转换(格式化和解析):SimpleDateFormat
格式化: Date -> String : 使用String format(Date date).
解析: String -> Date : 使用Date parse(String source).
具体使用看代码:
import java.text.SimpleDateFormat;
import java.util.Date;
public class SimpleDateFormatDemo {
public static void main(String[] args) {
//格式化: 将Date对象转换成String
//Date对象 --->"2020-08-19 11:26:30"
Date d = new Date();
System.out.println(d);
//SimpleDateFormat类:format
SimpleDateFormat sdf = new SimpleDateFormat();
//指定日期的格式
//M表示月, m表示分钟
sdf.applyPattern("yyyy-MM-dd hh:mm:ss");
String sdate = sdf.format(d);
System.out.println(sdate);
}
}
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class SimpleDateFormatDemo2 {
public static void main(String[] args) throws ParseException {
//日期的解析:String ->Date
String s = "2020年08月19日 11时44分30秒";
SimpleDateFormat sdf = new SimpleDateFormat();
//需要在解析前,指定日期的格式
//才能从字符串中获取到对应的数据
sdf.applyPattern("yyyy年MM月dd日 hh时mm分ss秒");
//一旦出现ParseException异常,那么肯定是指定格式错了
Date d = sdf.parse(s);
System.out.println(d);
}
}
4.5 如何方便的操作日期中的数据? Calendar中有哪些常用的方法?
对日期数据进行操作我们可以使用Calendar: 日历类, 可以帮我们对日期做相加减, 重新设置日期时间功能.
Calendar:
//设置的年月日小时分钟秒的值
c.setTime(d);
c.set(Calendar.YEAR,2020);
c.set(Calendar.MONTH,23);
c.set(Calendar.DATE,10);
c.set(Calendar.HOUR_OF_DAY,23);
c.set(Calendar.MINUTE,59);
c.set(Calendar.SECOND,59);
//相加减
c.add(Calendar.SECOND, 1);
c.add(Calendar.DAY_OF_MONTH,-1);
//得到设置的年月日小时分钟秒
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH)+1;
int date = c.get(Calendar.DATE);
int hour = c.get(Calendar.HOUR);
int minute = c.get(Calendar.MINUTE);
int second = c.get(Calendar.SECOND);
4.6 说说你对正则表达式的理解? 通常用在什么地方?
正则表达式: 是用来判断某个字符串是否满足我们设置的某些规则.
通常用在: 开发中进行判断, 替换操作.