javaSE学习笔记——第十四天正则表达式、Math类、System类、Data类、Calendar类等
javaSE学习第十四天
java知识
正则表达式的概述和简单使用
A:正则表达式
是指一个用来描述或者匹配一系列符合某个语法规则的字符串的单个字符串。其实就是一种规则。有自己特殊的应用。
作用:比如注册邮箱,邮箱有用户名和密码,一般会对其限制长度,这个限制长度的事情就是正则表达式做的
B:案例演示
需求:校验qq号码.
1:要求必须是5-15位数字
2:0不能开头
3:必须都是数字
a:非正则表达式实现
b:正则表达式实现
代码
package com.yinglongwu.regex;public class Demo1_Regex {public static void main(String[] args) {System.out.println(checkQQ("012345"));System.out.println(checkQQ("a1b345"));System.out.println(checkQQ("123456"));System.out.println(checkQQ("1234567890987654321"));String regex = "[1-9]\\d{4,14}"; //正则表达式的方法System.out.println("2553868".matches(regex));System.out.println("012345".matches(regex));System.out.println("2553868abc".matches(regex));}//非正则表达式public static boolean checkQQ(String qq) {boolean flag = true; //如果校验qq不符合要求就把flag置为false,如果符合要求直接返回if(qq.length() >= 5 && qq.length() <= 15) {if(!qq.startsWith("0")) {char[] arr = qq.toCharArray(); //将字符串转换成字符数组for (int i = 0; i < arr.length; i++) {char ch = arr[i]; //记录每一个字符if(!(ch >= '0' && ch <= '9')) {flag = false; //不是数字break;}}}else {flag = false; //以0开头,不符合qq标准}}else {flag = false; //长度不符合}return flag;}}### 正则表达式字符类演示* A:字符类* [abc] a、b 或 c(简单类) * [^abc] 任何字符,除了 a、b 或 c(否定) * [a-zA-Z] a到 z 或 A到 Z,两头的字母包括在内(范围) * [0-9] 0到9的字符都包括
代码示例
package com.yinglongwu.regex;public class Demo2_Regex {/*** [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(交集) [a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](减去) [a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去) */public static void main(String[] args) {//demo1();//demo2();//demo3();//demo4();//demo5();//demo6();String regex = "[a-z&&[^m-p]]"; //a 到 z,而非 m 到 p:[a-lq-z](减去) System.out.println("m".matches(regex));//falseSystem.out.println("a".matches(regex));//trueSystem.out.println("z".matches(regex));//trueSystem.out.println("n".matches(regex));//false}private static void demo6() {String regex = "[a-z&&[^bc]]"; // a 到 z,除了 b 和 c:[ad-z](减去)System.out.println("a".matches(regex));//trueSystem.out.println("b".matches(regex));//falseSystem.out.println("1".matches(regex));//false}private static void demo5() {String regex = "[a-z&&[def]]"; //d、e 或 f(交集)System.out.println("a".matches(regex)); //falseSystem.out.println("d".matches(regex)); //true}private static void demo4() {String regex = "[a-d[m-p]]"; //a 到 d 或 m 到 p:[a-dm-p](并集)System.out.println("a".matches(regex));//trueSystem.out.println("m".matches(regex));//trueSystem.out.println("n".matches(regex));//true}private static void demo3() {String regex = "[a-zA-Z]"; //a 到 z 或 A 到 Z,两头的字母包括在内(范围) System.out.println("a".matches(regex));//trueSystem.out.println("A".matches(regex));//trueSystem.out.println("z".matches(regex));//trueSystem.out.println("Z".matches(regex));//trueSystem.out.println("1".matches(regex));//falseSystem.out.println("%".matches(regex));//false}private static void demo2() {String regex = "[^abc]"; //除了a和b和的单个字符,才返回trueSystem.out.println("a".matches(regex)); //falseSystem.out.println("b".matches(regex)); //falseSystem.out.println("c".matches(regex)); //falseSystem.out.println("d".matches(regex)); //trueSystem.out.println("1".matches(regex)); //trueSystem.out.println("%".matches(regex)); //trueSystem.out.println("10".matches(regex));//false,10代表1字符和0字符,不是单个字符}private static void demo1() {String regex = "[abc]"; //[]代表单个字符,只能是a或b或c时返回trueSystem.out.println("a".matches(regex)); //trueSystem.out.println("b".matches(regex)); //trueSystem.out.println("c".matches(regex)); //trueSystem.out.println("d".matches(regex)); //falseSystem.out.println("1".matches(regex)); //falseSystem.out.println("%".matches(regex)); //false}}
正则表达式预定义字符类演示
A:预定义字符类
. 任何字符。
\d 数字:[0-9]
\w 单词字符:[a-zA-Z_0-9]
代码演示
package com.yinglongwu.regex;public class Demo3_Regex {/*** . 任何单个字符返回true\d 数字:[0-9] ,单个字符\D 非数字: [^0-9] \s 空白字符:[ \t\n\x0B\f\r] ,分别代表:空格、水平制表符table、换行、垂直制表符、翻页、回车\S 非空白字符:[^\s] \w 单词字符:[a-zA-Z_0-9] \W 非单词字符:[^\w] */public static void main(String[] args) {//demo1();//demo2();//demo3();//demo4();//demo5();//demo6();String regex = "\\W";System.out.println("a".matches(regex));//falseSystem.out.println("z".matches(regex));//falseSystem.out.println("_".matches(regex));//falseSystem.out.println("%".matches(regex));//true}private static void demo6() {String regex = "\\w";System.out.println("a".matches(regex));//trueSystem.out.println("z".matches(regex));//trueSystem.out.println("_".matches(regex));//trueSystem.out.println("%".matches(regex));//false}private static void demo5() {String regex = "\\S";System.out.println(" ".matches(regex)); //false,一个空格System.out.println(" ".matches(regex)); //false,一个table键System.out.println("a".matches(regex)); //true}private static void demo4() {String regex = "\\s";System.out.println(" ".matches(regex)); //一个空格,trueSystem.out.println(" ".matches(regex)); //一个tab键,trueSystem.out.println(" ".matches(regex)); //四个空格,false}private static void demo3() {String regex = "\\D";System.out.println("0".matches(regex));//falseSystem.out.println("9".matches(regex));//falseSystem.out.println("a".matches(regex));//true}private static void demo2() {String regex = "\\d"; //\代表转义字符,如果想表示\d的话,需要\\dSystem.out.println("0".matches(regex));//trueSystem.out.println("a".matches(regex));//falseSystem.out.println("9".matches(regex));//true}private static void demo1() {String regex = ".."; //任意两个字符System.out.println("a".matches(regex)); //falseSystem.out.println("ab".matches(regex));//true}}
正则表达式数量词
A:Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
代码演示
package com.yinglongwu.regex;public class Demo4_Regex {/*** Greedy 数量词 X? X,一次或一次也没有 X* X,零次或多次 ,包括一次X+ X,一次或多次 X{n} X,恰好 n 次 X{n,} X,至少 n 次 X{n,m} X,至少 n 次,但是不超过 m 次 */public static void main(String[] args) {//demo1();//demo2();//demo3();//demo4();//demo5();String regex = "[abc]{5,15}";System.out.println("abcba".matches(regex)); //trueSystem.out.println("abcbaabcabbabab".matches(regex)); //trueSystem.out.println("abcb".matches(regex)); //falseSystem.out.println("abcbaabaabcbaaba".matches(regex)); //false}public static void demo5() {String regex = "[abc]{5,}";System.out.println("abcba".matches(regex)); //trueSystem.out.println("abcbaabcabbabab".matches(regex)); //trueSystem.out.println("abcb".matches(regex)); //falseSystem.out.println("abcbaaba".matches(regex)); //true}public static void demo4() {String regex = "[abc]{5}";System.out.println("abcba".matches(regex)); //trueSystem.out.println("abcbaabcabbabab".matches(regex)); //falseSystem.out.println("abcb".matches(regex)); //falseSystem.out.println("abcbaaba".matches(regex)); //false}public static void demo3() {String regex = "[abc]+";System.out.println("".matches(regex)); //falseSystem.out.println("a".matches(regex)); //trueSystem.out.println("aaaaabbbbccccc".matches(regex)); //true}public static void demo2() {String regex = "[abc]*";System.out.println("".matches(regex)); //trueSystem.out.println("abc".matches(regex)); //trueSystem.out.println("a".matches(regex)); //true}public static void demo1() {String regex = "[abc]?";System.out.println("a".matches(regex));//trueSystem.out.println("b".matches(regex));//trueSystem.out.println("c".matches(regex));//trueSystem.out.println("d".matches(regex));//falseSystem.out.println("".matches(regex)); //true}}
正则表达式的分割功能
A:正则表达式的分割功能
- String类的功能:public String[] split(String regex)
B:案例演示
package com.yinglongwu.regex;public class Demo5_Split {/*** @param args*/public static void main(String[] args) {String s = "金三胖.郭美美.李dayone";String[] arr = s.split("\\."); //通过正则表达式切割字符串,注意转义for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]);}//金三胖//郭美美//李dayoneSystem.out.println("11111111111111111");}}
把给定字符串中的数字排序
A:案例演示
- 需求:我有如下一个字符串:”91 27 46 38 50”,请写代码实现最终输出结果是:”27 38 46 50 91”
代码
package com.yinglongwu.test;import java.util.Arrays;public class Test1 {/*** @param args* * A:案例演示* 需求:我有如下一个字符串:”91 27 46 38 50”,请写代码实现最终输出结果是:”27 38 46 50 91”* 100* 80* 分析:* 1,将字符串切割成字符串数组* 2,将字符串转换成数字并将其存储在一个等长度的int数组中* 3,排序* 4,将排序后的结果遍历并拼接成一个字符串*/public static void main(String[] args) {String s = "91 27 46 38 50";//1,将字符串切割成字符串数组String[] sArr = s.split(" ");//2,将字符串转换成数字并将其存储在一个等长度的int数组中int[] arr = new int[sArr.length];for (int i = 0; i < arr.length; i++) {arr[i] = Integer.parseInt(sArr[i]); //将数字字符串转换成数字}//3,排序Arrays.sort(arr);//4,将排序后的结果遍历并拼接成一个字符串27 38 46 50 91/*String str = ""; //不推荐这种方法,会产生很多垃圾for (int i = 0; i < arr.length; i++) {if(i == arr.length - 1) {str = str + arr[i]; //27 38 46 50 91}else {str = str + arr[i] + " "; //27 38 46 50 }}System.out.println(str);*/StringBuilder sb = new StringBuilder(); //这种方法只创建一个对象,节约内存for (int i = 0; i < arr.length; i++) {if(i == arr.length - 1) {sb.append(arr[i]);}else {sb.append(arr[i] + " ");}}System.out.println(sb);}}### 正则表达式的替换功能* A:正则表达式的替换功能* String类的功能:public String replaceAll(String regex,String replacement)
B:案例演示
package com.yinglongwu.regex;public class Demo6_ReplaceAll {/*** * A:正则表达式的替换功能* String类的功能:public String replaceAll(String regex,String replacement)*/public static void main(String[] args) {String s = "wo111ai222yinglongwu";String regex = "\\d"; //\\d代表的是任意数字String s2 = s.replaceAll(regex, ""); //用空字符代替任意数字System.out.println(s2); //woaiyinglongwu}
}
正则表达式的分组功能
A:正则表达式的分组功能
捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B©)) 中,存在四个这样的组:
1 ((A)(B(C))) 2 (A 3 (B(C)) 4 (C) 组零始终代表整个表达式。
B:案例演示
a:切割需求:请按照叠词切割: "sdqqfgkkkhjppppkl";b:替换需求:我我....我...我.要...要要...要学....学学..学.编..编编.编.程.程.程..程将字符串还原成:“我要学编程”。
代码
package com.yinglongwu.regex;public class Demo7_Regex {public static void main(String[] args) {//demo1();//demo2();/** 需求:我我....我...我.要...要要...要学....学学..学.编..编编.编.程.程.程..程将字符串还原成:“我要学编程”。*/String s = "我我....我...我.要...要要...要学....学学..学.编..编编.编.程.程.程..程";String s2 = s.replaceAll("\\.+", ""); //用空字符替换出现一次到多次的.String s3 = s2.replaceAll("(.)\\1+", "$1"); //$1代表第一组中的内容,用第一组的内容(也就是一个我)替换4个我System.out.println(s3); //我要学编程}public static void demo2() {//需求:请按照叠词切割: "sdqqfgkkkhjppppkl";String s = "sdqqfgkkkhjppppkl";String regex = "(.)\\1+"; //+代表第一组出现一次到多次String[] arr = s.split(regex);for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]); //sd} //fg} //hj//klpublic static void demo1() {//叠词 AABB形式/*String regex = "(.)\\1(.)\\2"; // ()代表一组,\\1代表第一组又出现一次 \\2代表第二组又出现一次System.out.println("快快乐乐".matches(regex));//trueSystem.out.println("快乐乐乐".matches(regex));//trueSystem.out.println("高高兴兴".matches(regex));//trueSystem.out.println("死啦死啦".matches(regex));//false *///叠词 ABAB形式String regex2 = "(..)\\1";System.out.println("死啦死啦".matches(regex2));//trueSystem.out.println("高兴高兴".matches(regex2));//trueSystem.out.println("快快乐乐".matches(regex2));//false}}
Pattern和Matcher的概述
A:Pattern和Matcher的概述
B:模式和匹配器的典型调用顺序
通过JDK提供的API,查看Pattern类的说明
典型的调用顺序是
Pattern p = Pattern.compile(“a*b”);
Matcher m = p.matcher(“aaaaab”);
boolean b = m.matches();
正则表达式的获取功能
A:正则表达式的获取功能
- Pattern和Matcher的结合使用
B:案例演示
- 需求:把一个字符串中的手机号码获取出来
代码
package com.yinglongwu.regex;import java.util.regex.Matcher;import java.util.regex.Pattern;public class Demo8_Pattern {public static void main(String[] args) {//demo1();String s = "我的手机是18988888888,我曾用过18987654321,还用过18812345678";String regex = "1[3578]\\d{9}"; //手机号的正则表达式Pattern p = Pattern.compile(regex);Matcher m = p.matcher(s);/*boolean b1 = m.find();System.out.println(b1);System.out.println(m.group());boolean b2 = m.find();System.out.println(b2);System.out.println(m.group());*/while(m.find()) //用循环代替上面注释掉的System.out.println(m.group());}public static void demo1() {Pattern p = Pattern.compile("a*b"); //获取到正则表达式Matcher m = p.matcher("aaaaab"); //获取匹配器boolean b = m.matches(); //看是否能匹配,匹配就返回trueSystem.out.println(b);//与上面的结果一样,可以用下面这一行替代System.out.println("aaaaab".matches("a*b")); }}
Math类概述和方法使用
A:Math类概述
- Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。
B:成员方法
public static int abs(int a)
public static double ceil(double a)
public static double floor(double a)
public static int max(int a,int b) min自学
public static double pow(double a,double b)
public static double random()
public static int round(float a) 参数为double的自学
public static double sqrt(double a)
代码
package com.yinglongwu.otherclass;public class Demo1_Math {public static void main(String[] args) {System.out.println(Math.PI); //圆周率System.out.println(Math.abs(-10)); //取绝对值//ceil天花板/** 13.0* 12.3* 12.0*/System.out.println(Math.ceil(12.3)); //13.0,向上取整,但是结果是一个doubleSystem.out.println(Math.ceil(12.99)); //13.0System.out.println("-----------");//floor地板/** 13.0* 12.3* 12.0*/System.out.println(Math.floor(12.3)); //12.0向下取整,但是结果是一个doubleSystem.out.println(Math.floor(12.99)); //12.0//获取两个值中的最大值System.out.println(Math.max(20, 30));//前面的数是底数,后面的数是指数System.out.println(Math.pow(2, 3)); //2.0 ^ 3.0//生成0.0到1.0之间的所以小数,包括0.0,不包括1.0,[0.0,1.0)System.out.println(Math.random());//四舍五入System.out.println(Math.round(12.3f));//12,返回intSystem.out.println(Math.round(12.9f));//13,返回int//开平方System.out.println(Math.sqrt(4));//2.0System.out.println(Math.sqrt(2));//1.414......System.out.println(Math.sqrt(3));//1.732......}}
Random类的概述和方法使用
A:Random类的概述
此类用于产生随机数如果用相同的种子创建两个 Random 实例,
则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列。
B:构造方法
public Random()
public Random(long seed)
C:成员方法
public int nextInt()
public int nextInt(int n)
代码
package com.yinglongwu.otherclass;import java.util.Random;public class Demo2_Random {/*** * A:Random类的概述* 此类用于产生随机数如果用相同的种子创建两个 Random 实例,* 则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列。* B:构造方法* public Random()* public Random(long seed)* C:成员方法* public int nextInt()* public int nextInt(int n)(重点掌握)*/public static void main(String[] args) {Random r = new Random(); //未指定种子,把纳秒值当做种子,所以每一次结果不一样//输出一次/*int x = r.nextInt();System.out.println(x);*///循环输出,结果不一样for(int i = 0; i < 10; i++) {//System.out.println(r.nextInt()); //生成任意随机数System.out.println(r.nextInt(100)); //生成在0到n范围内的随机数,包含0不包含n}/*Random r2 = new Random(1001);//指定种子后,输出结果一样int a = r2.nextInt();int b = r2.nextInt();System.out.println(a);System.out.println(b);*//*两次输出结果一样-12447463211060493871-12447463211060493871*/}}
System类的概述和方法使用
A:System类的概述
- System 类包含一些有用的类字段和方法。它不能被实例化。(因为底层把它私有化了)
B:成员方法
public static void gc()
public static void exit(int status)
public static long currentTimeMillis()
pubiic static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
C:案例演示
- System类的成员方法使用
代码演示
package com.yinglongwu.otherclass;public class Demo3_System {public static void main(String[] args) {//demo1();//demo2();//demo3();int[] src = {11,22,33,44,55};int[] dest = new int[8];for (int i = 0; i < dest.length; i++) {System.out.println(dest[i]);}System.out.println("--------------------------");System.arraycopy(src, 0, dest, 0, src.length); //将数组内容拷贝//(源数组,从源数组哪个下标开始,目标数组,从目标数组的哪个下标开始,源数组的个数)for (int i = 0; i < dest.length; i++) {System.out.println(dest[i]);}}public static void demo3() {long start = System.currentTimeMillis();//1秒等于1000毫秒for(int i = 0; i < 1000; i++) {System.out.println("*");}long end = System.currentTimeMillis(); //获取当前时间的毫秒值System.out.println(end - start);}public static void demo2() {System.exit(0); //0是正常终止,非0状态是异常终止,退出jvmSystem.out.println("11111111111"); //退出后这句话输出不了}public static void demo1() {for(int i = 0; i < 100; i++) {new Demo(); //产生100个垃圾System.gc(); //当垃圾不够多时,系统可能不会自动清理垃圾,运行垃圾回收器,相当于呼喊保洁阿姨}}}class Demo { //在一个源文件中不允许定义两个用public修饰的类@Overridepublic void finalize() {System.out.println("垃圾被清扫了");} }
BigInteger类的概述和方法使用
A:BigInteger的概述
- 可以让超过Integer范围内的数据进行运算
B:构造方法
- public BigInteger(String val)
C:成员方法
public BigInteger add(BigInteger val)
public BigInteger subtract(BigInteger val)
public BigInteger multiply(BigInteger val)
public BigInteger divide(BigInteger val)
public BigInteger[] divideAndRemainder(BigInteger val)
代码
package com.yinglongwu.otherclass;import java.math.BigInteger;public class Demo4_BigInteger {public static void main(String[] args) {//long num = 123456789098765432123L;//String s = "123456789098765432123";BigInteger bi1 = new BigInteger("100");BigInteger bi2 = new BigInteger("2");System.out.println(bi1.add(bi2)); //+System.out.println(bi1.subtract(bi2)); //-System.out.println(bi1.multiply(bi2)); //*System.out.println(bi1.divide(bi2)); ///(除)BigInteger[] arr = bi1.divideAndRemainder(bi2); //取除数和余数,返回到数组里for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]);}}}
BigDecimal类的概述和方法使用
A:BigDecimal的概述
由于在运算的时候,float类型和double很容易丢失精度,演示案例。
所以,为了能精确的表示、计算浮点数,Java提供了BigDecimal
不可变的、任意精度的有符号十进制数。
B:构造方法
- public BigDecimal(String val)
C:成员方法
public BigDecimal add(BigDecimal augend)
public BigDecimal subtract(BigDecimal subtrahend)
public BigDecimal multiply(BigDecimal multiplicand)
public BigDecimal divide(BigDecimal divisor)
D:案例演示
package com.yinglongwu.otherclass;import java.math.BigDecimal;public class Demo5_BigDecimal {/*十进制表示1/30.3333333333333333333333333333333333333333 */public static void main(String[] args) {//System.out.println(2.0 - 1.1); //0.89999999.../*BigDecimal bd1 = new BigDecimal(2.0); //这种方式在开发中不推荐,因为不够精确BigDecimal bd2 = new BigDecimal(1.1); System.out.println(bd1.subtract(bd2));*//*BigDecimal bd1 = new BigDecimal("2.0");//通过构造中传入字符串的方式,开发时推荐BigDecimal bd2 = new BigDecimal("1.1");System.out.println(bd1.subtract(bd2));*/ //0.9BigDecimal bd1 = BigDecimal.valueOf(2.0); //这种方式在开发中也是推荐的BigDecimal bd2 = BigDecimal.valueOf(1.1);System.out.println(bd1.subtract(bd2)); //0.9}}
Date类的概述和方法使用
A:Date类的概述
- 类 Date 表示特定的瞬间,精确到毫秒。
B:构造方法
public Date()
public Date(long date)
C:成员方法
public long getTime()
public void setTime(long time)
代码
package com.yinglongwu.otherclass;import java.util.Date;public class Demo6_Date {public static void main(String[] args) {//demo1();//demo2();Date d1 = new Date(); d1.setTime(1000); //设置毫秒值,改变时间对象System.out.println(d1); //打印出来比参考时间多一秒,1000毫秒等于一秒}public static void demo2() {Date d1 = new Date(); System.out.println(d1.getTime()); //通过时间对象获取毫秒值System.out.println(System.currentTimeMillis()); //通过系统类的方法获取当前时间毫秒值}public static void demo1() {Date d1 = new Date(); //如果没有传参数代表的是当前时间System.out.println(d1);Date d2 = new Date(0); //如果构造方法中参数传为0代表的是1970年1月1日System.out.println(d2); //通过毫秒值创建时间对象,输出的具体时间与电脑时区有关}}### SimpleDateFormat类实现日期和字符串的相互转换* A:DateFormat类的概述* DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。是抽象类,所以使用其子类SimpleDateFormat
B:SimpleDateFormat构造方法
public SimpleDateFormat()
public SimpleDateFormat(String pattern)
C:成员方法
public final String format(Date date)
public Date parse(String source)
代码
package com.yinglongwu.otherclass;import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;public class Demo7_SimpleDateFormat {@throws ParseException //抛出异常,勿删public static void main(String[] args) throws ParseException {//demo1();//demo2();//demo3();//将时间字符串转换成日期对象String str = "2000年08月08日 08:08:08";SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");Date d = sdf.parse(str); //将时间字符串转换成日期对象,目前这里会报异常System.out.println(d);}public static void demo3() {Date d = new Date(); //获取当前时间对象SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");//创建日期格式化类对象System.out.println(sdf.format(d)); //将日期对象转换为字符串}public static void demo2() {Date d = new Date(); //获取当前时间对象SimpleDateFormat sdf = new SimpleDateFormat(); //创建日期格式化类对象System.out.println(sdf.format(d)); //88-6-6 下午9:31}public static void demo1() {//DateFormat df = new DateFormat(); //DateFormat是抽象类,不允许实例化//DateFormat df1 = new SimpleDateFormat();DateFormat df1 = DateFormat.getDateInstance(); //相当于父类引用指向子类对象,右边的方法返回一个子类对象}}
Calendar类的概述和获取日期的方法
A:Calendar类的概述
- Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。
B:成员方法
public static Calendar getInstance()
public int get(int field)
Calendar类的add()和set()方法
A:成员方法
public void add(int field,int amount)
public final void set(int year,int month,int date)
代码
package com.yinglongwu.otherclass;import java.util.Calendar;public class Demo9_Calendar {public static void main(String[] args) {//demo1();Calendar c = Calendar.getInstance(); //父类引用指向子类对象//c.add(Calendar.MONTH, -1); //对指定的字段进行向前减或向后加//c.set(Calendar.YEAR, 2000); //修改指定字段c.set(2000, 7, 8);System.out.println(c.get(Calendar.YEAR) + "年" + getNum((c.get(Calendar.MONTH)+1)) + "月" + getNum(c.get(Calendar.DAY_OF_MONTH)) + "日" + getWeek(c.get(Calendar.DAY_OF_WEEK)));}public static void demo1() {Calendar c = Calendar.getInstance(); //父类引用指向子类对象//System.out.println(c);System.out.println(c.get(Calendar.YEAR)); //通过字段获取年System.out.println(c.get(Calendar.MONTH)); //通过字段后期月,但是月是从0开始编号的,我们要自己加一System.out.println(c.get(Calendar.DAY_OF_MONTH));//月中的第几天System.out.println(c.get(Calendar.DAY_OF_WEEK));//周日是第一天,周六是最后一天System.out.println(c.get(Calendar.YEAR) + "年" + getNum((c.get(Calendar.MONTH)+1)) + "月" + getNum(c.get(Calendar.DAY_OF_MONTH)) + "日" + getWeek(c.get(Calendar.DAY_OF_WEEK)));}/** 将星期存储表中进行查表* 1,返回值类型String* 2,参数列表int week*/public static String getWeek(int week) {String[] arr = {"","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};return arr[week];}/** 如果是个数数字前面补0* 1,返回值类型String类型* 2,参数列表,int num*/public static String getNum(int num) {/*if(num > 9) {return "" + num;}else {return "0" + num;}*/return num > 9 ? "" + num : "0" + num;}}
如何获取任意年份是平年还是闰年(通过判断2月份的天数实现)
A:案例演示
package com.yinglongwu.test;import java.util.Calendar;import java.util.Scanner;public class Test3 {/*** 需求:键盘录入任意一个年份,判断该年是闰年还是平年* Calendar c = Calendar.getInstance();* * 分析:* 1,键盘录入年Scanner* 2,创建Calendar c = Calendar.getInstance();* 3,通过set方法设置为那一年的3月1日* 4,将日向前减去1* 5,判断日是多少天,如果是29天返回true否则返回false*/public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入年份,判断该年份是闰年还是平年:");//int year = sc.nextInt();String line = sc.nextLine(); //录入数字字符串int year = Integer.parseInt(line); //将数字字符串转换成数字boolean b = getYear(year);System.out.println(b);}private static boolean getYear(int year) {//2,创建Calendar c = Calendar.getInstance();Calendar c = Calendar.getInstance();//设置为那一年的3月1日c.set(year, 2, 1); //月份是从0开始的//将日向前减去1c.add(Calendar.DAY_OF_MONTH, -1);//判断是否是29天return c.get(Calendar.DAY_OF_MONTH) == 29;}}
其他知识
无
javaSE学习笔记——第十四天正则表达式、Math类、System类、Data类、Calendar类等相关推荐
- Windows保护模式学习笔记(十四)—— 阶段测试
Windows保护模式学习笔记(十四)-- 阶段测试 题目一 解题步骤 题目二 解题步骤 题目一 描述:给定一个线性地址,和长度,读取内容 int ReadMemory(OUT BYTE* buffe ...
- OpenCV学习笔记(十四):重映射:remap( )
OpenCV学习笔记(十四):重映射:remap( ) 图像的坐标映射是通过原图像与目标图像之间建立一种映射关系,这种映射关系有两种,一种是计算原图像任意像素在映射后图像的坐标位置,另一种是计算变换后 ...
- QT学习笔记(十四):QLayout的属性介绍
QT学习笔记(十四):QLayout的属性介绍 主要包括QBoxLayout.和QGridLayout以及QFormLayout等的参数类似. 我主要说明一下QGridLayout在QtDesigne ...
- MATLAB学习笔记(十四)
MATLAB学习笔记(十四) 一.线性方程组求解 1.1 直接法 1.1.1 利用左除运算符 1.1.2 利用矩阵分解 1.2 迭代法 1.2.1 雅可比(Jacobi)迭代法 1.2.2 高斯-赛德 ...
- python数据挖掘学习笔记】十四.Scipy调用curve_fit实现曲线拟合
#2018-03-28 10:02:08 March Wednesday the 13 week, the 087 day SZ SSMR python数据挖掘学习笔记]十四.Scipy调用curve ...
- Spring Security技术栈学习笔记(十四)使用Spring Social集成QQ登录验证方式
上一篇文章<Spring Security技术栈开发企业级认证与授权(十三)Spring Social集成第三方登录验证开发流程介绍>主要是介绍了OAuth2协议的基本内容以及Spring ...
- Cty的Linux学习笔记(十四)
Linux学习笔记--第十四篇 环境变量配置文件: /etc/profile:预设了几个重要的变量,例如PATH,USER,LOGNAME,MAIL,INPUTRC,HOSTNAME,HISTSIZE ...
- 深度学习笔记(十四)—— 超参数优化[Hyperparameter Optimization]
这是深度学习笔记第十四篇,完整的笔记目录可以点击这里查看. 训练神经网络会涉及到许多超参数设置.神经网络中最常见的超参数包括: the initial learning rate lea ...
- Slicer学习笔记(十四)vtkMRMLVolumeNode 与 vtkImageData
Slicer学习笔记(十四)vtkMRMLVolumeNode 与 vtkImageData 1.Adding in MRML to Slicer 2.MRML Scene 3.MRML Nodes ...
最新文章
- 'libxml/tree.h' file not found
- 【MySQL经典案例分析】 Waiting for table metadata lock
- java高级之Io流
- BaaS后端即服务 - 分析篇
- 云炬Android开发笔记 12基于WebView的混合App框架设计(包含浏览器与原生请求Cookie的处理)
- CSS学习——基础分类整理
- 期末考试前的预习,科目:化工设备与反应器(6)
- dev layoutview 怎么显示大小_「转」磁盘满了,为啥du却显示还有很大空间?
- oracle服务器找不到怎么解决,简析Oracle数据库常见问题及解决方案
- Blazor 机制初探以及什么是前后端分离,还不赶紧上车?
- EXCEL 将选中列改为只读
- Android 记住账号密码+自动登录
- 苹果iPad忘记了Apple ID密码该怎么办?(手机教程)
- Leetcode个人题解714
- channel小知识点
- Vue制作一个日程表
- Vue3 的Proxy
- 分享 | 全职在家工作/读书应该如何保持效率
- Java第五天笔记01——面向对象基础
- MG90S舵机驱动原理和程序代码
热门文章
- DELL Poweredge R320 U盘安装2008R2系统
- 百家号发帖软件怎么发帖?使用视频教程
- 面向多任务的仓储移动机器人路径规划与调度
- Super Pi-计算10000位圆周率需要多少时间?
- Python读取dat文件格式的数据
- 图解编程:到底什么是“抽象”和“面向对象”
- UICC 之 USIM 详解全系列——UICC中的Apps与Files结构
- shopeeLazada菲律宾市场好做吗?东南亚菲律宾站点热卖产品5大类推荐
- 计算机管理MMC 无法在比,win10系统打开组策略提示“MMC无法创建管理单元”的处理办法...
- 办公室出租,提升办公体验