a.
正则表达式
概述
是一种描述或匹配一系列符合某个语法规则的字符串的单个字符串,就是一种规则,有自己特殊的应用。
作用
比如注册邮箱,用户名或密码,用于限制长度及格式,这种限制的事情就是用正则表达式来做的。
案例演示
* 需求:校验qq号码.
* 1:要求必须是5-15位数字
* 2:0不能开头
* 3:必须都是数字
* a:非正则表达式实现
* b:正则表达式实现
b.
字符类:
[] 表示单个字符的匹配。
[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(交集) 相当于 [def]
[a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](减去)
[a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去)
预定义字符类:
预定义字符类:
. 任何单个字符(与行结束符可能匹配也可能不匹配)
.. 任意两个字符
\d 单个数字:[0-9]
\D 单个非数字: [^0-9]
\s 单个空白字符:[ \t\n\x0B\f\r]
\S 单个非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9] System.out.println("_".matches(regex7)); //true
\W 非单词字符:[^\w] System.out.println("_".matches(regex7)); //false
注意:单个\ 表示转义字符,如果想表示\d的话,就要使用两个\\ 即\\d 其他的也是这样。
Greedy 数量词:
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
c.
正则表达式的分割功能
* String类的功能: public String[] split(String regex);
给定字符串中的数字排序
* 需求:我有如下一个字符串:”91 27 46 38 50”,请写代码实现最终输出结果是:”27 38 46 50 91”
正则表达式的替换功能
* String类的功能:public String replaceAll(String regex, String replacement);
正则表达式的分组功能
* 捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C))) 中,存在四个这样的组:
1 ((A)(B(C)))
2 (A
3 (B(C))
4 (C)
组零始终代表整个表达式。
案例演示
a:切割
需求:请按照叠词切割: "sdqqfgkkkhjppppkl"; 将在一起出现重复的都切掉,最终: sdfghjkl
b:替换
需求:我我....我...我.要...要要...要学....学学..学.编..编编.编.程.程.程..程
将字符串还原成:“我要学编程”。
Pattern类 和 Matcher类
Pattern类
概述
* Pattern在lang包下。被final修饰,所以不能被继承,实现serializable 序列化接口。
* 是正则表达式的编译表示形式。
* Matcher在util包下。被final修饰,所以不能被继承,通过解释 Pattern 对character sequence 执行匹配操作的引擎。
Pattern和Matcher的使用
* 指定为字符串的正则表达式必须首先被编译为此类的实例。然后,可将得到的模式用于创建Matcher 对象,依照正则表达式,该对象可以与任意字符序列匹配。执行匹配所涉及的所有状 态都驻留在匹配器中,所以多个匹配器可以共享同一模式。
因此,典型的调用顺序是
Pattern p = Pattern.compile("a*b"); //a*表示a出现1次或多次,b表示只出现一次
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
在仅使用一次正则表达式时,可以方便地通过此类定义 matches 方法。此方法编译表达式并在单个调用中将输入序列与其匹配。语句
boolean b = Pattern.matches("a*b", "aaaaab");等效于上面的三个语句,尽管对于重复的匹配而言它效率不高,因为它不允许重用已编译的模式。
Pattern类和Matcher类的应用场景
正则表达式的获取功能
* Pattern和Matcher的结合使用
案例演示
* 需求:把一个字符串中的手机号码获取出来
G:\优快云_Android_\Code\Day14_正则表达式 Math类 Random类 System类 BigInteger类 BigDecimal类 Date类 Calendar类\src\com\day14\a\regex\Demo08_正则表达式_的Pattern类和Matcher类.java
e.
Math类
概述
* 用于操作数字的类,比如:运算指数/对数/平方根等。
* 该类中都是静态方法,如果一个类中所有方法都是静态,就会去私有其构造方法,为了不让其他类去创建该类的对象。
成员方法
* public static int abs(int a); //绝对值,正数的绝对值还是其本身,负数绝对值是正数。
* public static double ceil(double d); //天花板,向上取 double整值
* public static double floor(double d); //地板,向下取 double整值
* public static int max(int a, int b); //最大值 获取两个值的最大值
* public static int min(int a, int b); //最小值 获取两个值的最小值
* public static double pow(double a, double b);//返回第一个参数的第二个参数次幂的值 pow(2,3) 2^3
* public static double random(); //随机数 生成0.0到0.1之间的随机数,包括0.0不包括0.1
* public static int round(float a); //四舍五入
* public static double sqrt(double a); //返回正确舍入的 double 值的正平方根 Math.sqrt(4)); //2.0 即该数的开平方数,即:2*2 = 4 Math.sqrt(9)); //3.0 即该数的开平方数,即:3*3 =9
Random类
概述
* util包下,直接父类是Object。
* 用于生成一个伪随机数,因为该数是通过算法算出来的,所以严格意义上不是真的随机数即伪随机数。
* 如果采用相同的种子创建两个Random实例的nextInt()方法,即每次返回的都是同一个数字序列。
构造方法
* public Random();
* public Random(long seed); 如果采用相同的种子创建两个Random实例的nextInt()方法,即每次返回的都是同一个数字序列。
成员方法
* public int nextInt(); 返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。
* public int nextInt(int n); 生成一个0到n范围内的随机数,包含0但不包含n的一个随机数 (重点掌握)
如何获取一个1-100之间的随机数(两种方式)
A: (int)(Math.random()*100) + 1; //包左不包右
B: Random r = new Random();
r.nextInt(100) + 1;
System类
概述
* 在lang包下,直接父类Object
* 用于操作系统的类,其中包含一些有用的 类字段 和 方法,该类中所有方法都是静态的,所以要私有该类构造方法,而且不能被其他类去创建对象。
字段摘要
* err 标准的错误输出流
* in 标准的输入流
* 标准的键盘输入流,默认指向的就是键盘。将我们写的一些程序信息通过键盘录入的方式输入到内存,最终到硬盘上,在硬盘中占实际空间。
* out 标准的输出流
* 标准的输出流,默认指向控制台。 将结果呈现在控制台上输出给我们看:从内存中输出给我们看,没有在硬盘中占空间。
成员方法
* public static void gc(); //调用吃的方法,调用finlized方法来进行垃圾回收。
* 垃圾回收些什么东西? 当某个对象不存在更多的引用时,即 在程序中没有任何引用指向的对象就是垃圾。
* 在Object中有个finalize()方法用于自动执行垃圾回收器,当finalize()方法不执行的时候,我们可以通过gc()方法去通知finalize()去执行垃圾回收,但不一定调用成功,通过多次的调用gc()去通过finalize()方法肯定会执行垃圾回收。
* finalize()方法不执行的原因是:系统认为这个对象的垃圾还不够的,多的时候就会自动执行回收。如果想自己手动回收,就可以使用 system.gc()方法去调用Object中的finalize去执行垃圾回收。
* public static void exit(int status); // 终止当前正在运行的Java虚拟机。 即退出Java虚拟机,参数是0就是正常退出,参数非0就是非状态退出。
* public static void currentTimeMillis(); //获取当前时间的毫秒值。当前时间与协调世界时 1970 年 1 月 1 日午夜之间的时间差(以毫秒为单位测量)。
* public static void arraycopy(Object src, int srcPos, Object dest, int destPost, int length); //从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。
* 参数:
* src - 源数组。
* srcPos - 源数组中的起始位置。
* dest - 目标数组。
* destPos - 目标数据中的起始位置。
* length - 要复制的数组元素的数量。
System类中的gc方法告诉垃圾回收器调用finalize方法来做手动的垃圾回收操作,但不一定立即执行(不一定会执行成功,如果调用多次gc,可能会成功)
BigInteger类
概述
* 在math包下,间距父类:Number 直接父类:Object。
* 可以让超过Integer范围内的数据进行运算。
* 不可变的任意精度的整数。所有操作中,都以二进制补码形式表示 BigInteger(如 Java的基本整数类型)。
* BigInteger 提供所有 Java 的基本整数操作符的对应物,并提供 java.lang.Math 的所有相关方法。
* 金融关于钱的公司用的多,因为该BigInteger存储值的范围要比Integer和Int要大的多,而且精确。
构造方法
* public BigInteger(String val);
成员方法
* public BigInteger add(BigInteger value); 加
* public BigInteger subtract(BigInteger value); 减
* public BigInteger multiply(BigInteger value); 乘
* public BigInteger divide(BigInteger value); 除
* public BigInteger[] divideAndRemainder(BigInteger value); 取商 和 取余数。
BigDecimal类 decimal有道词典翻译: adj. 小数的;十进位的n. 小数
概述
* 在math包下,间接父类Number 直接父类Object。
* 不可变的、任意精度的有符号十进制数。
* BigDecimal 类提供以下操作:算术、标度操作、舍入、比较、哈希算法和格式转换。
* toString() 方法提供 BigDecimal 的规范表示形式
构造方法
* public BigDecimal(String value);通过构造传入字符串的方式,开发推荐,因为够精确。
成员方法
* public BigDecimal add(BigInteger value); 加
* public BigDecimal subtract(BigInteger value); 减
* public BigDecimal multiply(BigInteger value); 乘
* public BigDecimal divide(BigInteger value); 除
* public static BigDecimal valueOf(double val); 使用 Double.toString(double) 方法提供的 double 规范的字符串表示形式将 double 转换为 BigDecimal。
f.
Date类
概述
* 存在两个包下,一个在sql包下,另一个在util包下。
* 我们这个就是util包下的,用于表示特定的瞬间,精确到毫秒值。
构造方法
* public Date(); 通过毫秒值来创建时间对象。
* public Date(long date); 如果构造参数为0,表示1970,1,1。如果没有传参数,就是当前时间。参数是 毫秒值
成员方法
* public long getTime(); //通过时间对象来获取毫秒值。
* public long setTime(long time); //设置毫秒值,来改变当前时间对象。
SimpleDateFormat类
概述
* 是一个用于实现日期和字符串的互相转换的类。
* 是一个于语言环境有关的方式来格式化和解析日期的具体类。
* 允许将时间格式化(日期对象 转换成format 时间字符串),解析(时间字符串 转换成parse 日期对象) 和 规范化。
* DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。是一个抽象类,使用的是其子类:SimpleDateFormat。
* DateFormat d = new Dateformt(); 报错,因为该DateFormat类是抽象类,无法被实例化。
* DateFormat是抽象类,是SimpleDateFormat类的抽象父类。所以使用的方式可以是:父类引用指向子类对象,如下:。
* DateFormat d = DateFormat.getDateInstance(); //这就相当于 是父类引用 d 指向子类对象,右边的方法返回一个子类。即 DateFormat.getDateInstance() 等同于子类 new SimpleDateFormat()。
* 相当于 DateFormat d = new SimpleDateFormat(); SimpleDateFormat中拥有Dateformat的所有方法,所以只要学习SimpleDateFormat既可。
构造方法 --时间格式化(日期对象 转换成format 文本字符串) --格式化是最终变成字符串,使用format,用String来接收
* public SimpleDateFormat(); 美式表示法的日期格式化类的构造方法,当没有参数的时候,表现形式是:17-9-29 上午12:40 美式表示法,具体如下:
Date d = new Date(); //获取当前时间对象
SimpleDateFormat sdf = new SimpleDateFormat(); //创建日期格式化类对象。
String format = sdf.format(d); //将当前时间格式化表示。将当前时间d 用SimpleDateFormat中的format方法 格式化当前日期时间。
System.out.println(format); //17-9-29 上午12:40 但是该日期是美式日期表示,所以想要我们中国自己人的格式化日期来表示,就参考demo03中的。
* public SimpleDateformat(String pattern); 传入的参数表示自定义的日期表现形式。如:yyyy年MM月dd日 HH:mm:ss 中式表示法的日期格式化类的构造方法
//中国人的日期表示方法:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); //参数形式是固定的,一般建议不要改变
String strFormat = sdf.format(new Date());
System.out.println(strFormat); //2017年09月29日 01:18:11
成员方法
* public final String format(Date date); 格式化日期 --将日期 转换为 日期字符串
* public Date parse(String source); 解析 --将日期字符串 转换为 日期Date对象 --解析是最终变成Date对象,使用parse 用Date对象来接收。
public Date parse(String source); 解析 --将文本字符串 转换为 日期Date对象
将日期字符串 转换成 日期Date对象,该过程是一个解析的过程,使用parse(String source)方法,source必须要和自定义的日期字符串对象规格一样。
String dateStr = "2014年04月03日 13:32:23"; //日期字符串
SimpleDateFormat stf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); //日期格式化对象 参数必须与dateStr日期字符串中的格式一样。
将日期字符串解析成日期对象
Date parse = stf.parse(dateStr); //该处是一个异常,异常处理有两种方式一是向上抛,二是自己try。 此时采用向上抛的形式,异常以后说。
System.out.println(parse); //Thu Apr 03 13:32:23 CST 2014
格式化 Date --》 String
解析 String --> Date
例子:你来到这个世界多少天案例
* 需求:算一下你来到这个世界多少天?
g.
Calendar类
概述
* 因为Date类中的大多部分方法都已经过时,所以在jdk1.1开始由 Calendar类来取代。
* Calendar在util包下,直接父类Object,没有间接子类。
* Calendar c = Calendar.getInstance(); 这句话就相当于 父类引用指向子类对象了,和一般抽象类的父类引用指向子类对象 有所不同。
* Calendar是一个抽象类,它用于特定瞬间与一组诸如:YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段 之间的转换提供了一些方法。
成员方法
* public static Calendar getInstance(); 获取一个日历,返回的是当前时间的日历表现形式。
* public int get(int field); 返回给定日历字段的值。参数表示 Calendar.Year Calendar.Month等。
常用方法
* public void add(int field, int amount); 根据日历的规则,为给定的日历字段添加或减去指定的时间量。
* 参数:field表示日历 amount表示加或减的值。该方法可针对 YEAR、MONTH 和 DAY_OF_MONTH 等做具体的时间量操作。
* public final void set(int year, int mounth, int date); 设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值。
* 设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值。保留其他日历字段以前的值。如果不需要这样做,则先调用 clear()。
例子:
获取任意年份是平年还是闰年
* 需求:键盘录入任意一个年份,判断该年是闰年还是平年 2月有29天的是闰年
正则表达式
概述
是一种描述或匹配一系列符合某个语法规则的字符串的单个字符串,就是一种规则,有自己特殊的应用。
作用
比如注册邮箱,用户名或密码,用于限制长度及格式,这种限制的事情就是用正则表达式来做的。
案例演示
* 需求:校验qq号码.
* 1:要求必须是5-15位数字
* 2:0不能开头
* 3:必须都是数字
* a:非正则表达式实现
* b:正则表达式实现
b.
字符类:
[] 表示单个字符的匹配。
[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(交集) 相当于 [def]
[a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](减去)
[a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去)
预定义字符类:
预定义字符类:
. 任何单个字符(与行结束符可能匹配也可能不匹配)
.. 任意两个字符
\d 单个数字:[0-9]
\D 单个非数字: [^0-9]
\s 单个空白字符:[ \t\n\x0B\f\r]
\S 单个非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9] System.out.println("_".matches(regex7)); //true
\W 非单词字符:[^\w] System.out.println("_".matches(regex7)); //false
注意:单个\ 表示转义字符,如果想表示\d的话,就要使用两个\\ 即\\d 其他的也是这样。
Greedy 数量词:
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
c.
正则表达式的分割功能
* String类的功能: public String[] split(String regex);
给定字符串中的数字排序
* 需求:我有如下一个字符串:”91 27 46 38 50”,请写代码实现最终输出结果是:”27 38 46 50 91”
正则表达式的替换功能
* String类的功能:public String replaceAll(String regex, String replacement);
正则表达式的分组功能
* 捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C))) 中,存在四个这样的组:
1 ((A)(B(C)))
2 (A
3 (B(C))
4 (C)
组零始终代表整个表达式。
案例演示
a:切割
需求:请按照叠词切割: "sdqqfgkkkhjppppkl"; 将在一起出现重复的都切掉,最终: sdfghjkl
b:替换
需求:我我....我...我.要...要要...要学....学学..学.编..编编.编.程.程.程..程
将字符串还原成:“我要学编程”。
Pattern类 和 Matcher类
Pattern类
概述
* Pattern在lang包下。被final修饰,所以不能被继承,实现serializable 序列化接口。
* 是正则表达式的编译表示形式。
* Matcher在util包下。被final修饰,所以不能被继承,通过解释 Pattern 对character sequence 执行匹配操作的引擎。
Pattern和Matcher的使用
* 指定为字符串的正则表达式必须首先被编译为此类的实例。然后,可将得到的模式用于创建Matcher 对象,依照正则表达式,该对象可以与任意字符序列匹配。执行匹配所涉及的所有状 态都驻留在匹配器中,所以多个匹配器可以共享同一模式。
因此,典型的调用顺序是
Pattern p = Pattern.compile("a*b"); //a*表示a出现1次或多次,b表示只出现一次
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
在仅使用一次正则表达式时,可以方便地通过此类定义 matches 方法。此方法编译表达式并在单个调用中将输入序列与其匹配。语句
boolean b = Pattern.matches("a*b", "aaaaab");等效于上面的三个语句,尽管对于重复的匹配而言它效率不高,因为它不允许重用已编译的模式。
Pattern类和Matcher类的应用场景
正则表达式的获取功能
* Pattern和Matcher的结合使用
案例演示
* 需求:把一个字符串中的手机号码获取出来
G:\优快云_Android_\Code\Day14_正则表达式 Math类 Random类 System类 BigInteger类 BigDecimal类 Date类 Calendar类\src\com\day14\a\regex\Demo08_正则表达式_的Pattern类和Matcher类.java
e.
Math类
概述
* 用于操作数字的类,比如:运算指数/对数/平方根等。
* 该类中都是静态方法,如果一个类中所有方法都是静态,就会去私有其构造方法,为了不让其他类去创建该类的对象。
成员方法
* public static int abs(int a); //绝对值,正数的绝对值还是其本身,负数绝对值是正数。
* public static double ceil(double d); //天花板,向上取 double整值
* public static double floor(double d); //地板,向下取 double整值
* public static int max(int a, int b); //最大值 获取两个值的最大值
* public static int min(int a, int b); //最小值 获取两个值的最小值
* public static double pow(double a, double b);//返回第一个参数的第二个参数次幂的值 pow(2,3) 2^3
* public static double random(); //随机数 生成0.0到0.1之间的随机数,包括0.0不包括0.1
* public static int round(float a); //四舍五入
* public static double sqrt(double a); //返回正确舍入的 double 值的正平方根 Math.sqrt(4)); //2.0 即该数的开平方数,即:2*2 = 4 Math.sqrt(9)); //3.0 即该数的开平方数,即:3*3 =9
Random类
概述
* util包下,直接父类是Object。
* 用于生成一个伪随机数,因为该数是通过算法算出来的,所以严格意义上不是真的随机数即伪随机数。
* 如果采用相同的种子创建两个Random实例的nextInt()方法,即每次返回的都是同一个数字序列。
构造方法
* public Random();
* public Random(long seed); 如果采用相同的种子创建两个Random实例的nextInt()方法,即每次返回的都是同一个数字序列。
成员方法
* public int nextInt(); 返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。
* public int nextInt(int n); 生成一个0到n范围内的随机数,包含0但不包含n的一个随机数 (重点掌握)
如何获取一个1-100之间的随机数(两种方式)
A: (int)(Math.random()*100) + 1; //包左不包右
B: Random r = new Random();
r.nextInt(100) + 1;
System类
概述
* 在lang包下,直接父类Object
* 用于操作系统的类,其中包含一些有用的 类字段 和 方法,该类中所有方法都是静态的,所以要私有该类构造方法,而且不能被其他类去创建对象。
字段摘要
* err 标准的错误输出流
* in 标准的输入流
* 标准的键盘输入流,默认指向的就是键盘。将我们写的一些程序信息通过键盘录入的方式输入到内存,最终到硬盘上,在硬盘中占实际空间。
* out 标准的输出流
* 标准的输出流,默认指向控制台。 将结果呈现在控制台上输出给我们看:从内存中输出给我们看,没有在硬盘中占空间。
成员方法
* public static void gc(); //调用吃的方法,调用finlized方法来进行垃圾回收。
* 垃圾回收些什么东西? 当某个对象不存在更多的引用时,即 在程序中没有任何引用指向的对象就是垃圾。
* 在Object中有个finalize()方法用于自动执行垃圾回收器,当finalize()方法不执行的时候,我们可以通过gc()方法去通知finalize()去执行垃圾回收,但不一定调用成功,通过多次的调用gc()去通过finalize()方法肯定会执行垃圾回收。
* finalize()方法不执行的原因是:系统认为这个对象的垃圾还不够的,多的时候就会自动执行回收。如果想自己手动回收,就可以使用 system.gc()方法去调用Object中的finalize去执行垃圾回收。
* public static void exit(int status); // 终止当前正在运行的Java虚拟机。 即退出Java虚拟机,参数是0就是正常退出,参数非0就是非状态退出。
* public static void currentTimeMillis(); //获取当前时间的毫秒值。当前时间与协调世界时 1970 年 1 月 1 日午夜之间的时间差(以毫秒为单位测量)。
* public static void arraycopy(Object src, int srcPos, Object dest, int destPost, int length); //从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。
* 参数:
* src - 源数组。
* srcPos - 源数组中的起始位置。
* dest - 目标数组。
* destPos - 目标数据中的起始位置。
* length - 要复制的数组元素的数量。
System类中的gc方法告诉垃圾回收器调用finalize方法来做手动的垃圾回收操作,但不一定立即执行(不一定会执行成功,如果调用多次gc,可能会成功)
BigInteger类
概述
* 在math包下,间距父类:Number 直接父类:Object。
* 可以让超过Integer范围内的数据进行运算。
* 不可变的任意精度的整数。所有操作中,都以二进制补码形式表示 BigInteger(如 Java的基本整数类型)。
* BigInteger 提供所有 Java 的基本整数操作符的对应物,并提供 java.lang.Math 的所有相关方法。
* 金融关于钱的公司用的多,因为该BigInteger存储值的范围要比Integer和Int要大的多,而且精确。
构造方法
* public BigInteger(String val);
成员方法
* public BigInteger add(BigInteger value); 加
* public BigInteger subtract(BigInteger value); 减
* public BigInteger multiply(BigInteger value); 乘
* public BigInteger divide(BigInteger value); 除
* public BigInteger[] divideAndRemainder(BigInteger value); 取商 和 取余数。
BigDecimal类 decimal有道词典翻译: adj. 小数的;十进位的n. 小数
概述
* 在math包下,间接父类Number 直接父类Object。
* 不可变的、任意精度的有符号十进制数。
* BigDecimal 类提供以下操作:算术、标度操作、舍入、比较、哈希算法和格式转换。
* toString() 方法提供 BigDecimal 的规范表示形式
构造方法
* public BigDecimal(String value);通过构造传入字符串的方式,开发推荐,因为够精确。
成员方法
* public BigDecimal add(BigInteger value); 加
* public BigDecimal subtract(BigInteger value); 减
* public BigDecimal multiply(BigInteger value); 乘
* public BigDecimal divide(BigInteger value); 除
* public static BigDecimal valueOf(double val); 使用 Double.toString(double) 方法提供的 double 规范的字符串表示形式将 double 转换为 BigDecimal。
f.
Date类
概述
* 存在两个包下,一个在sql包下,另一个在util包下。
* 我们这个就是util包下的,用于表示特定的瞬间,精确到毫秒值。
构造方法
* public Date(); 通过毫秒值来创建时间对象。
* public Date(long date); 如果构造参数为0,表示1970,1,1。如果没有传参数,就是当前时间。参数是 毫秒值
成员方法
* public long getTime(); //通过时间对象来获取毫秒值。
* public long setTime(long time); //设置毫秒值,来改变当前时间对象。
SimpleDateFormat类
概述
* 是一个用于实现日期和字符串的互相转换的类。
* 是一个于语言环境有关的方式来格式化和解析日期的具体类。
* 允许将时间格式化(日期对象 转换成format 时间字符串),解析(时间字符串 转换成parse 日期对象) 和 规范化。
* DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。是一个抽象类,使用的是其子类:SimpleDateFormat。
* DateFormat d = new Dateformt(); 报错,因为该DateFormat类是抽象类,无法被实例化。
* DateFormat是抽象类,是SimpleDateFormat类的抽象父类。所以使用的方式可以是:父类引用指向子类对象,如下:。
* DateFormat d = DateFormat.getDateInstance(); //这就相当于 是父类引用 d 指向子类对象,右边的方法返回一个子类。即 DateFormat.getDateInstance() 等同于子类 new SimpleDateFormat()。
* 相当于 DateFormat d = new SimpleDateFormat(); SimpleDateFormat中拥有Dateformat的所有方法,所以只要学习SimpleDateFormat既可。
构造方法 --时间格式化(日期对象 转换成format 文本字符串) --格式化是最终变成字符串,使用format,用String来接收
* public SimpleDateFormat(); 美式表示法的日期格式化类的构造方法,当没有参数的时候,表现形式是:17-9-29 上午12:40 美式表示法,具体如下:
Date d = new Date(); //获取当前时间对象
SimpleDateFormat sdf = new SimpleDateFormat(); //创建日期格式化类对象。
String format = sdf.format(d); //将当前时间格式化表示。将当前时间d 用SimpleDateFormat中的format方法 格式化当前日期时间。
System.out.println(format); //17-9-29 上午12:40 但是该日期是美式日期表示,所以想要我们中国自己人的格式化日期来表示,就参考demo03中的。
* public SimpleDateformat(String pattern); 传入的参数表示自定义的日期表现形式。如:yyyy年MM月dd日 HH:mm:ss 中式表示法的日期格式化类的构造方法
//中国人的日期表示方法:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); //参数形式是固定的,一般建议不要改变
String strFormat = sdf.format(new Date());
System.out.println(strFormat); //2017年09月29日 01:18:11
成员方法
* public final String format(Date date); 格式化日期 --将日期 转换为 日期字符串
* public Date parse(String source); 解析 --将日期字符串 转换为 日期Date对象 --解析是最终变成Date对象,使用parse 用Date对象来接收。
public Date parse(String source); 解析 --将文本字符串 转换为 日期Date对象
将日期字符串 转换成 日期Date对象,该过程是一个解析的过程,使用parse(String source)方法,source必须要和自定义的日期字符串对象规格一样。
String dateStr = "2014年04月03日 13:32:23"; //日期字符串
SimpleDateFormat stf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); //日期格式化对象 参数必须与dateStr日期字符串中的格式一样。
将日期字符串解析成日期对象
Date parse = stf.parse(dateStr); //该处是一个异常,异常处理有两种方式一是向上抛,二是自己try。 此时采用向上抛的形式,异常以后说。
System.out.println(parse); //Thu Apr 03 13:32:23 CST 2014
格式化 Date --》 String
解析 String --> Date
例子:你来到这个世界多少天案例
* 需求:算一下你来到这个世界多少天?
g.
Calendar类
概述
* 因为Date类中的大多部分方法都已经过时,所以在jdk1.1开始由 Calendar类来取代。
* Calendar在util包下,直接父类Object,没有间接子类。
* Calendar c = Calendar.getInstance(); 这句话就相当于 父类引用指向子类对象了,和一般抽象类的父类引用指向子类对象 有所不同。
* Calendar是一个抽象类,它用于特定瞬间与一组诸如:YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段 之间的转换提供了一些方法。
成员方法
* public static Calendar getInstance(); 获取一个日历,返回的是当前时间的日历表现形式。
* public int get(int field); 返回给定日历字段的值。参数表示 Calendar.Year Calendar.Month等。
常用方法
* public void add(int field, int amount); 根据日历的规则,为给定的日历字段添加或减去指定的时间量。
* 参数:field表示日历 amount表示加或减的值。该方法可针对 YEAR、MONTH 和 DAY_OF_MONTH 等做具体的时间量操作。
* public final void set(int year, int mounth, int date); 设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值。
* 设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值。保留其他日历字段以前的值。如果不需要这样做,则先调用 clear()。
例子:
获取任意年份是平年还是闰年
* 需求:键盘录入任意一个年份,判断该年是闰年还是平年 2月有29天的是闰年