14.01_常见对象(正则表达式的概述和简单使用)
- A:正则表达式
- 是指一个用来描述或者匹配一系列符合某个语法规则的字符串的单个字符串。其实就是一种规则。有自己特殊的应用。
- 作用:比如注册邮箱,邮箱有用户名和密码,一般会对其限制长度,这个限制长度的事情就是正则表达式做的
B:案例演示
需求:校验qq号码.
- 1:要求必须是5-15位数字
- 2:0不能开头
- 3:必须都是数字
a:非正则表达式实现
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; }
b:正则表达式实现
String regex = "[1-9]\\d{4,14}"; System.out.println("2553868".matches(regex));
14.02_常见对象(字符类演示)
- A:字符类
- [abc] a、b 或 c(简单类)
- [^abc] 任何字符,除了 a、b 或 c(否定)
- [a-zA-Z] a到 z 或 A到 Z,两头的字母包括在内(范围)
- [0-9] 0到9的字符都包括
14.03_常见对象(预定义字符类演示)
- A:预定义字符类
- . 任何字符
- \d 数字:[0-9]
- \D 非数字: [^0-9]
- \s 空白字符:[ \t\n\x0B\f\r]
- \S 非空白字符:[^\s]
- \w 单词字符:[a-zA-Z_0-9]
- \W 非单词字符:[^\w]
- \l 任意字符
14.04_常见对象(数量词)
- A:Greedy 数量词
- X? X,一次或一次也没有
- X* X,零次或多次
- X+ X,一次或多次
- X{n} X,恰好 n 次
- X{n,} X,至少 n 次
- X{n,m} X,至少 n 次,但是不超过 m 次
14.05_常见对象(正则表达式的分割功能)
- A:正则表达式的分割功能
- String类的功能:public String[] split(String regex)
B:案例演示
正则表达式的分割功能
String s = "金三胖.郭美美.李dayone"; String[] arr = s.split("\\."); //通过正则表达式切割字符串
14.06_常见对象(把给定字符串中的数字排序)
A:案例演示
需求:我有如下一个字符串:”91 27 46 38 50”,请写代码实现最终输出结果是:”27 38 46 50 91”
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 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);
14.07_常见对象(正则表达式的替换功能)
- A:正则表达式的替换功能
- String类的功能:public String replaceAll(String regex,String replacement)
B:案例演示
正则表达式的替换功能
String s = “wo111ai222lavinia”;
String regex = “\d”; //\d代表的是任意数字
String s2 = s.replaceAll(regex, “”);
System.out.println(s2);
14.08_常见对象(正则表达式的分组功能)
- A:正则表达式的分组功能
- 捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C))) 中,存在四个这样的组:
1 ((A)(B(C))) 2 (A 3 (B(C)) 4 (C) 组零始终代表整个表达式。 //叠词 快快乐乐,高高兴兴 String regex = "(.)\\1(.)\\2"; //\\1代表第一组又出现一次 \\2代表第二组又出现一次 System.out.println("快快乐乐".matches(regex)); System.out.println("快乐乐乐".matches(regex)); System.out.println("高高兴兴".matches(regex)); System.out.println("死啦死啦".matches(regex)); //叠词 死啦死啦,高兴高兴 String regex2 = "(..)\\1"; System.out.println("死啦死啦".matches(regex2)); System.out.println("高兴高兴".matches(regex2)); System.out.println("快快乐乐".matches(regex2));
B:案例演示
a:切割
需求:请按照叠词切割: “sdqqfgkkkhjppppkl”;//需求:请按照叠词切割: "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]); }
b:替换
需求:我我….我…我.要…要要…要学….学学..学.编..编编.编.程.程.程..程
将字符串还原成:“我要学编程”。String s = "我我....我...我.要...要要...要学....学学..学.编..编编.编.程.程.程..程"; String s2 = s.replaceAll("\\.+", ""); String s3 = s2.replaceAll("(.)\\1+", "$1"); //$1代表第一组中的内容 System.out.println(s3);
14.09_常见对象(Pattern和Matcher的概述)
- A:Pattern和Matcher的概述
B:模式和匹配器的典型调用顺序
通过JDK提供的API,查看Pattern类的说明
典型的调用顺序是
- Pattern p = Pattern.compile(“a*b”);//获取到正则表达式
- Matcher m = p.matcher(“aaaaab”);//获取匹配器
- boolean b = m.matches();//看是否能匹配,匹配就返回true
boolean b = Pattern.matches("a*b", "aaaaab");
14.10_常见对象(正则表达式的获取功能)
A:正则表达式的获取功能
- Pattern和Matcher的结合使用
B:案例演示
需求:把一个字符串中的手机号码获取出来
String s = "我的手机是18988888888,我曾用过18987654321,还用过18812345678"; String regex = "1[3578]\\d{9}"; Pattern p = Pattern.compile(regex); Matcher m = p.matcher(s); while(m.find()) System.out.println(m.group());
14.11_常见对象(Math类概述和方法使用)
- A:Math类概述
- Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。
- B:成员方法
- public static int abs(int a) //绝对值
- public static double ceil(double a) //向上取整,但是结果是一个double
- public static double floor(double a) //向下取整,但是结果是一个double
- public static int max(int a,int b) //获取两个值中的最大值
- public static double pow(double a,double b)/前面的数是底数,后面的数是指数
- public static double random()//生成0.0到1.0之间的所以小数,包括0.0,不包括1.0
- public static int round(float a)//四舍五入
- public static double sqrt(double a) //开平方
14.12_常见对象(Random类的概述和方法使用)
- A:Random类的概述
- 此类用于产生随机数如果用相同的种子创建两个 Random 实例,
- 则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列。
- B:构造方法
- public Random() 默认种子,每次产生的随机数不同
- public Random(long seed) 指定种子,每次种子相同,随机数就相同
- C:成员方法
- public int nextInt() 返回int范围内的随机数
- public int nextInt(int n) 返回[0,n)范围内的随机数
14.13_常见对象(System类的概述和方法使用)
- A:System类的概述
- System 类包含一些有用的类字段和方法。它不能被实例化。
- B:成员方法
- public static void gc() 运行垃圾回收器
- public static void exit(int status) 退出jvm //非0状态是异常终止,退出jvm
- public static long currentTimeMillis() 获取当前时间的毫秒值
- pubiic static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 数组复制
- C:案例演示
- System类的成员方法使用
14.14_常见对象(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) //取除数和余数
14.15_常见对象(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:案例演示
BigDecimal类的构造方法和成员方法使用
float a = 2.0f; float b = 1.1F; System.out.println(a - b); //0.9 System.out.println(2.0 - 1.1);//0.8999999999999999 /*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));*/ BigDecimal bd1 = BigDecimal.valueOf(2.0); //这种方式在开发中也是推荐的 BigDecimal bd2 = BigDecimal.valueOf(1.1); System.out.println(bd1.subtract(bd2));
14.16_常见对象(Date类的概述和方法使用)(掌握)
- A:Date类的概述
- 类 Date 表示特定的瞬间,精确到毫秒。
- B:构造方法
- public Date()
- public Date(long date)
- C:成员方法
- public long getTime() //通过时间对象获取毫秒值
- public void setTime(long time) //设置毫秒值,改变时间对象
14.17_常见对象(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)
Date d = new Date(); //获取当前时间对象 SimpleDateFormat sdf = new SimpleDateFormat(); //创建日期格式化类对象 System.out.println(sdf.format(d)); //88-6-6 下午9:31 Date d = new Date(); //获取当前时间对象 SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");//创建日期格式化类对象 System.out.println(sdf.format(d)); //将时间字符串转换成日期对象 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);
14.18_常见对象(你来到这个世界多少天案例)(掌握)
A:案例演示
需求:算一下你来到这个世界多少天?
//1,将生日字符串和今天字符串存在String类型的变量中 String birthday = "1991年10月21日"; String today = "2088年6月6日"; //2,定义日期格式化对象 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日"); //3,将日期字符串转换成日期对象 Date d1 = sdf.parse(birthday); Date d2 = sdf.parse(today); //4,通过日期对象后期时间毫秒值 long time = d2.getTime() - d1.getTime(); //5,将两个时间毫秒值相减除以1000,再除以60,再除以60,再除以24得到天 System.out.println(time / 1000 / 60 / 60 / 24 );
14.19_常见对象(Calendar类的概述和获取日期的方法)(掌握)
- A:Calendar类的概述
- Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。
B:成员方法
- public static Calendar getInstance()
public int get(int field)
public static void main(String[] args) { demo1(); Calendar c = Calendar.getInstance(); //父类引用指向子类对象 //c.add(Calendar.MONTH, -1); //对指定的字段进行向前减或向后加 //c.set(Calendar.YEAR, 2000); //修改指定字段 c.set(2016, 10, 06); 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; }
14.20_常见对象(Calendar类的add()和set()方法)(掌握)
- A:成员方法
- public void add(int field,int amount)
- public final void set(int year,int month,int date)
B:案例演示
Calendar类的成员方法使用
//c.add(Calendar.MONTH, -1); //对指定的字段进行向前减或向后加 //c.set(Calendar.YEAR, 2000); //修改指定字段 c.set(2016, 10, 06);
14.21_常见对象(如何获取任意年份是平年还是闰年)(掌握)
A:案例演示
需求:键盘录入任意一个年份,判断该年是闰年还是平年
private static boolean getYear(int year) { //2,创建Calendar c = Calendar.getInstance(); Calendar c = Calendar.getInstance(); //设置为那一年的3月1日 c.set(year, 2, 1); //将日向前减去1 c.add(Calendar.DAY_OF_MONTH, -1); //判断是否是29天 return c.get(Calendar.DAY_OF_MONTH) == 29; }
14.22_day14总结
- 把今天的知识点总结一遍。