JAVA中部分API(下)
6)math类
包含执行基本数字运算的方法,Math类没有提供公开的构造器,通过类名.方法名使用。
如何使用类中的成员呢?看类的成员是否都是静态的,如果是,通过类名就可以直接调用
//public static int abs(int a) 获取参数绝对值
//public static double ceil(double a) 向上取整
//public static double floor(double a) 向下取整
//public static int round(float a) 四舍五入
//public static int max(int a,int b) 获取两个int值中的较大值
//public static double pow(double a,double b) 返回a的b次幂的值
//public static double random() 返回值为double的随机值,范围[0.0,1.0) 包前不包后
7)System类
System也是一个工具类,代表了当前系统,提供了一些与系统相关的方法。
没有提供公开的构造器,通过类名.方法名使用。
//System系统类
//in out err 静态常量
System.err.print("xx");
//常用方法
System.exit(0);//表示正常终止应用程序
long time = System.currentTimeMillis();//返回1970年1月1日0点作为起点到现在的毫秒总数
public static void exit(int status)//终止当前运行的 Java 虚拟机,非零表示异常终止
public static long currentTimeMillis()//返回当前系统的时间毫秒值形式
long time = System.currentTimeMillis();//返回1970年1月1日0点作为起点到现在的毫秒总数
//可以做时间的计算:性能分析
long startTime = System.currentTimeMillis();
for(int i = 0;i<10000;i++){
syso("输出:"+i);
}
long endTime = System.currentTimeMillis();
syso((endTime-startTime)/1000.0+"s");
public static void arraycopy(数据源数组, 起始索引, 目的地数组, 起始索引, 拷贝个数)//数组拷贝
int[] arr1 = {10,20,30,40};
int[] arr2 = new int[5];
system.arraycopy(arr,2,arr2,4);
syso(Arrays.toString(arr2));
8)BigDecimal类
用于解决浮点数失真,调方法得对象是最好的方法

public class BigDecimalDemo {
public static void main(String[] args) {
// 浮点型运算的时候直接+ * / 可能会出现数据失真(精度问题)。
System.out.println(0.09 + 0.01);
System.out.println(1.0 - 0.32);
System.out.println(1.015 * 100);
System.out.println(1.301 / 100);
System.out.println("-------------------------");
double a = 0.1;
double b = 0.2;
double c = a + b;
System.out.println(c);
//包装浮点型数据成为大数据对象 BigDeciaml
BigDecimal a1 = BigDecimal.valueOf(a);
BigDecimal b1 = BigDecimal.valueOf(b);
BigDecimal c1 = a1.add(b1);
System.out.println(c1);
System.out.println("-------------------------");
//再转化为double类型
c = c1.doubleValue();
System.out.println(c);
//注意事项:BigDecimal是一定要精度运算的
//获取对象BigDecimal b1 = BigDecimal.valueOf(0.1);
BigDecimal a11 = BigDecimal.valueOf(10.0);
BigDecimal b11 = BigDecimal.valueOf(3.0);
//BigDecimal c11 = a11.divide(b11);//会报错因为除不尽
/**
* 参数一: 除数 参数二:保留小数位数 参数三:舍入模式
*/
BigDecimal c11 = a11.divide(b11,2,RoundingMode.HALF_UP);
}
}
9)正则表达式(regular expression)
(1)基本匹配
描述了一种字符串匹配的模式,按照特点格式对字符串进行验证匹配
是由普通字符和特殊字符组成的字符串
有regex -----表示支持正则
eg:str.replaceAll(regex,replecement);

特殊字符(元字符)
//在没有使用元符号的时候,相当于做equals比较
String str = "hello";
String regex = "h";
syso(str.matches(regex));//false
regex = "hello";
syso(str.matches(regex));//true
//元符号 ? -- 匹配前面的子表达式零次或一次返回true
String str = "hello";
String regex = "h?";
syso(str.matches(regex));//false
String str = "xxx";
String regex = "h";
syso(str.matches(regex));//false
String str = "hh";
String regex = "h?";
syso(str.matches(regex));//false
//从第一位开始匹配
String str = "ah";
String regex = "h?";
syso(str.matches(regex));//false
String str = "";
String regex = "h?";
syso(str.matches(regex));//true
String str = "h";
String regex = "h?";
syso(str.matches(regex));//true
//元符号 +---匹配前面的子表达式一次或多次
str = "111aa";
regex = "1+a";
System.out.println(str.matches(regex));//false
str = "111a";
regex = "1+a";
System.out.println(str.matches(regex));//true
str = "1a";
regex = "1+a";
System.out.println(str.matches(regex));//true
//* --匹配零次或多次(不包含一次)
//a* --匹配a零次或多次
//a{5} --匹配确定的a 5次
//a{5,7} --a出现5-7次
//a{5,} --a出现5-无数次
//^1 --以1开头
//a$ --以$结尾
//x|y --匹配x或y
//[xyz] --匹配是x或y或z的一个字符
//[^xyz] --匹配不是x、y、z的字符
//[a-z] --匹配一个a-z的字符
//[a-z]{5} --匹配五个a-z的字符
//([A-Z]|[a-z]){4} --匹配大写或小写字符四次
//([A-Z]|[a-z]){4} --匹配一次大写字母 或 四次小写字母
//\d --匹配一个数字字符 ==[0-9]
//\D --匹配一个非数字 ==[^0-9]
在JAVA中使用带\的正则时需要多加一个\
//\w --匹配包括下划线的任何单词字符,等价[A-Za-z0-9_]
//\W --匹配任何非单词字符,等价于^[A-Za-z0-9_]
\\判断一个号码是不是手机号
regex = "^1[3-9][0-9]{9}";//以一开头第二个数字是0-9,后面9位都是数字的手机号
(2)字符串中正则的应用

(3)正则表达式爬取信息

10)Date类 (util下,不是sql下的)+Calendar类
(1)Date类
Date类代表当前所在系统的日期时间信息
1、日期对象如何创建,如何获取时间毫秒值?
public Date();
public long getTime();
2、时间毫秒值怎么恢复成日期对象
public Date(long time);
public void setTime(long time);
计算当前时间往后走1小时121秒之后的时间是多少

(2)SimpleDateFormat类作用
可以对Date对象或时间毫秒值格式化成我们喜欢的时间形式
也可以把字符串时间解析成日期对象
构造方法:
无参构造一般不用,通常使用有参构造
public SimpleDateFormat(String pattern)---构造一个SimpleDateFormat,使用指定的格式
SimpleDateFormat sfs = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss EEE a");
//EEE --- 星期几
//a -- 上午还是下午
格式化方法:
public final String format(Date date) ------将日期格式化成日期/时间字符串
public final String format(Object time) ------将时间毫秒值式化成日期/时间字符串

解析时间:
解析字符串时间成为日期对象:2011-11-11 11:11:22 -> Date日期对象
public Date parse(String source) ------> 从给定字符串的开始解析文本以生成日期
Date date = new Date();
//返回1970年1月1日0点到现在的毫秒数
long num = date.getTime();//与System.currentTimeMillis();相同
//date默认是当时的时间
String birthday = "2000-1-1"
Date date = new Date();
SimpleDateFormat sfs = new SimpleDateFormat("yyyy-MM-dd");
try {
//String -->Date
date = sfs.parse(birthday);//会把date设置为 "2000-1-1"
} catch (ParseException e) {
System.out.println("生日格式输入不合法!");
return false;
}
//这里date值改变了
// date.getTime();变成了从2000年到1970年的毫秒数
public class RegexDemo {
public static void main(String[] args) {
//java.util.Date; 日期类 有构造方法
Date date = new Date();
System.out.println(date.getTime());
System.out.println(date);
//日期转换类 hh-12小时制 HH-24小时制
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
//将一个日期转为指定格式的字符串 Date -->String
String dateFormat = sf.format(date);
System.out.println(dateFormat);
String string = "2011-10-01";
//将字符纯转换为日期格式
SimpleDateFormat sfs = new SimpleDateFormat("yyyy-MM-dd");
try {
Date d = sfs.parse(string);
System.out.println(d);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//calebdar 日历类,无构造方法
//有getInstance方法
Calendar c = Calendar.getInstance();
//返回当前系统时间
System.out.println(c.getTimeInMillis());
//返回Date对象,对象时间是当前时间,或设置后的时间
Date date2 = c.getTime();
//get 获取日期
System.out.println(c.get(1));//年
System.out.println(c.get(Calendar.YEAR));
System.out.println(c.get(2));//月
System.out.println(c.get(Calendar.MONTH));
System.out.println(c.get(3));//今年的第几周
System.out.println(c.get(Calendar.WEEK_OF_YEAR));
System.out.println(c.get(6));//今年的第几天
System.out.println(c.get(Calendar.DAY_OF_YEAR));
System.out.println(c.get(5));//这个月的第几天
System.out.println(c.get(Calendar.DAY_OF_MONTH));
System.out.println(c.get(4));//这周的第几天,周日开始算
System.out.println(c.get(Calendar.DAY_OF_WEEK));
//set 设置日历数据的某个字段
c.set(1, 2011);
System.out.println(c.get(Calendar.YEAR));
//设置年月日,改变当前时间,分钟及其后面的使用系统时间
c.set(year,month,day);
c.getTimeInMillis();//返回设置时间到70年毫秒数
//在当前基础上增加
c.add(Calendar.DAY_OF_MONTH,2);
}
}
11)Random类、UUID类
Random类
-
1)Random(long seed):使用单个long种子创建一个新的随机数生成器
可以在构造Random对象的时候指定种子
eg:
Random r1 = new Random(20);2)或者默认当前系统时间的毫秒数作为种子数
eg:
Random r1 = new Random();初始化时seed 20并没有起直接作用(注意:不是没有起作用)
Random r1 = new Random(20); int i = r1.nextInt(100);//调用r1中的100是随机数的上限,产生的随机数为0-100的整数,不包括100。 Random r2 = new Random(20); int j = r2.nextInt(100);//对于种子相同的Random对象,生成的随机数序列是一样的。另外,直接使用Random无法避免生成重复的数字,如果需要生成不重复的随机数序列,需要借助数组和集合类
-
java.utl.Random类摘要
protected int next(int bits):生成下一个伪随机数。
boolean nextBoolean():返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的boolean值。
void nextBytes(byte[] bytes):生成随机字节并将其置于用户提供的 byte 数组中。
double nextDouble():返回下一个伪随机数,它是取自此随机数生成器序列的、在0.0和1.0之间均匀分布的 double值。
float nextFloat():返回下一个伪随机数,它是取自此随机数生成器序列的、在0.0和1.0之间均匀分布float值。
double nextGaussian():返回下一个伪随机数,它是取自此随机数生成器序列的、呈高斯(“正态”)分布的double值,其平均值是0.0标准差是1.0。
int nextInt():返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。
int nextInt(int n):返回一个伪随机数,它是取自此随机数生成器序列的、在(包括和指定值(不包括)之间均匀分布的int值。
long nextLong():返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的 long 值。
void setSeed(long seed):使用单个 long 种子设置此随机数生成器的种子。 -
几个例子
下面给几个例子:
生成[0,1.0)区间的小数:double d1 = r.nextDouble();
生成[0,5.0)区间的小数:double d2 = r.nextDouble() * 5;
生成[1,2.5)区间的小数:double d3 = r.nextDouble() * 1.5 + 1;
生成-2的31次方 到 2的31次方-1 之间的整数:int n = r.nextInt();
生成[0,10)区间的整数:
int n2 = r.nextInt(10);//方法一n2 = Math.abs(r.nextInt() % 10);//方法二
UUID类
//UUID类,无构造方法
//32位16进制值的唯一一个随机数
UUID uuid = UUID.randomUUID();
syso(uuid);
12)新增日期API
JDK8新增日期类,java.time包提供了新的日期和时间API
LocalDate:不包含具体时间的日期。
LocalTime:不含日期的时间。
LocalDateTime:包含了日期及时间。
Instant:代表的是时间戳。
DateTimeFormatter 用于做时间的格式化和解析的
Duration:用于计算两个“时间”间隔
Period:用于计算两个“日期”间隔
新增的API严格区分了时刻、本地日期、本地时间,并且,对日期和时间进行运算更加方便。其次,新API的类型几乎全部是不变类型(和String的使用类似),可以放心使用不必担心被修改。
(1)LocalDate、LocalTime、LocalDateTime
LocalDate:


LocalTime:

localDateTime:啥都可以拿,也可以向其他两者转换


LocalDateTime 综合了 LocalDate 和 LocalTime 里面的方法,所以下面只用 LocalDate 和 LocalTime 来举例。
这些方法返回的是一个新的实例引用,因为LocalDateTime 、LocalDate 、LocalTime 都是不可变的。
时间的更改(增删):

时间的判断:

(2)Instant
时间戳是包含日期和时间的,与java.util.Date很类似,事实上Instant就是类似JDK8 以前的Date。
Instant和Date这两个类可以进行转换。

(3)DateTimeFormatter

(4)period类
用于计算“日期”间隔差异,主要用于LocalDate之间的比较

(5)Duration
精准计算差多少天多少小时,计算“时间”间隔

(6)ChronoUnit
用于在单个时间单位内测量一段时间

13)Arrays类
数组操作工具,专门用于操作数组元素。
(1)方法

(2)Arrays类对于Comparator比较器的支持
public static <T> void sort(类型[] a, Comparator<? super T> c)----------使用自定义的比较器对象来定制比较规则
如果认为左边数据 大于 右边数据 返回正整数
如果认为左边数据 小于 右边数据 返回负整数
如果认为左边数据 等于 右边数据 返回0

浙公网安备 33010602011771号