JAVASE第14天笔记
来源:互联网 发布:c语言玫瑰花数 编辑:程序博客网 时间:2024/06/15 00:44
Day14课堂笔记
标签(空格分隔): java基础
正则表达式
什么是正则表达式?
其实就是一个字符串的匹配规则.简单而言,就是用来判断字符串是否符合你指定要求的规则.
* 为什么要用到正则表达式?用这个有什么好处?
在字符串的匹配过程中,大大的节省了代码.如检查QQ是否合法
- 需求:校验qq号码.
- 分析需求:
- 1:要求必须是5-15位数字
定义一个字符串 存着QQ号码 String s =”4549846131”;
字符串里面有一个长度的方法 length()可以获取这个字符串长度
判断流程
区间: 逻辑与 并且
if(s.length() > 5 && s.length() <15) - 2:0不能开头
什么不能开头,判断的方式 s.starsWith(“0”) - 3:必须都是数字
….
toCharArray():变成字符数组
变成了字符数组后,可以拿到每个字符,这个时候,我就可以判断这个字符是否是数字.
判断是否字符的条件 >= ‘0’ && <=’9’
public class Demo1_Regex { /** * * A:正则表达式 * 是指一个用来描述或者匹配一系列符合某个语法规则的字符串的单个字符串。其实就是一种规则。有自己特殊的应用。 * 作用:比如注册邮箱,邮箱有用户名和密码,一般会对其限制长度,这个限制长度的事情就是正则表达式做的 * B:案例演示 * 需求:校验qq号码. * 1:要求必须是5-15位数字 * 2:0不能开头 * 3:必须都是数字 * a:非正则表达式实现 * b:正则表达式实现 */ 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)); } /* * 需求:校验qq号码. * 1:要求必须是5-15位数字 * 2:0不能开头 * 3:必须都是数字 * 校验qq * 1,明确返回值类型boolean * 2,明确参数列表String qq */ 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; }}
在这里regex正则表达式 其实就是一个规则 []代表单个字符 ,出现在[]中的字符 任意一个,都算你符合规则,但前提记得是要一个字符才合法
// String regex = "[abc]"; //[]代表单个字符 System.out.println("a".matches(regex)); System.out.println("b".matches(regex)); System.out.println("c".matches(regex));
两个步骤:
第一步: 定义个规则 例如要匹配是否abc之中的其中个字符,我们可以定义规则如下
举例 String guize = "[abc]";
第二步:拿我们的字符串去匹配,看看是否合法
格式 :需要比较的字符串调用matches方法,在matches方法里面传入你定义好的规则即可.
举例 "a".matches(guize)
左边是放需要匹配的字符串,方法里面放规则
注意:匹配后会得到一个布尔类型的结果,也就是true或者false. 如果得到的是true代表匹配对了,如果得到的是false证明不符合定义出来的规则.
正则其他规则
. 任何字符
\d 数字:[0-9] :这是两种写法 \d 和 [0-9]:表示0-9之间的单个字符
注意:书写的时候 是写 \d ,这样写是因为要对 \进行转义
\w 单词字符:[a-zA-Z_0-9] :注意 这个不单是0-9 还有下划线 还有大小写字母都可以
举例:
第一步:定于规则
String guize = “\d”; //这个规则就是匹配数字
第二步:匹配规则
boolean b = “a”.matches(guize);
true :代表正确 false :错误
数量词:对我们的规则限定数量
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次 (常见)
X{n} X,恰好 n 次
X{n,m} X,至少 n 次,但是不超过 m 次 (常见)
能否匹配一个手机号码?
规则 : 1,必须1开头 2,手机第二位数必须是 34578 3,这个长度必须是11位
public class Test3 { /* * 能否匹配一个手机号码? 规则 : 1,必须1开头 2,手机第二位数必须是 34578其中一个 3,这个长度必须是11位 */ public static void main(String[] args) { //第一步:定义个规则 String guize = "1[34578]\\d{9}"; //第二步:匹配规则 String phone1 = "13427597888"; boolean b1 = phone1.matches(guize); System.out.println(b1); String phone2 = "00427597888"; boolean b2 = phone2.matches(guize); System.out.println(b2); String phone3 = "53427597888"; boolean b3 = phone3.matches(guize); System.out.println(b3); }}
字符串的切割方法
String类
split(规则)
举例:
public class Test4 { public static void main(String[] args) { String guize = ","; //注意切割完之后得到的是 字符串数组 String[] sarr = "打球,游泳,爬山,跳舞".split(guize); for (int i = 0; i < sarr.length; i++) { System.out.println(sarr[i]); } }}
重要案例(练习到熟练,将案例里面的知识点好好思考作用)
案例涉及的知识点:
1,数组的遍历 for循环遍历 .数组的赋值
2,字符串的切割方法 split分割方法
3,数字字符串转成整型 Integer.parseInt(数字字符串);
4,数据的拼接 StringBuilder的使用 ,字符串拼接
5,数组工具类的使用Arrays.sort(),对数组的排序
package com.heima.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); }}
String类里面替换方法
public class Demo6_ReplaceAll { /** * * A:正则表达式的替换功能 * String类的功能:public String replaceAll(String regex,String replacement) */ public static void main(String[] args) { String s = "wo111ai222heima"; String regex = "\\d"; //\\d代表的是任意数字 String s2 = s.replaceAll(regex, ""); System.out.println(s2); }}
正则表达式的分组
以()分组
(.(\d)) : 最左小括号开始算起 1 2
使用组 \组号
$组号 以小括号括起来的为组
Pattern和matcher对象
public static void main(String[] args) { //demo1(); String s = "我的手机是18511866260,我曾用过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()); }
Math 类
这个类的方法是静态修饰的,所以可以直接使用类名.方法名调用,不需要创建对象,也不能创建对象,因为它的构造方法被私有了.
PI :public static final double PI : 静态 终态
abs(double a) : 求绝对值
static double ceil(double a) 向上取整
static double random() : 返回0.0到1.0的随机数
public static void demo1() { //向上取整 System.out.println(Math.ceil(-11.5));//-11.0 System.out.println(Math.ceil(12.5)); //向下取整 System.out.println(Math.floor(-11.5)); //-12 System.out.println(Math.floor(14.5)); //14.0 //随机数 System.out.println(Math.random());//0.0~1.0 }
Random类
- 使用Random类,如何获取一个1-100之间的随机数?
第一步:创建个对象 Random rd = new Random();
第二步:获取1-100之间的随机数 int i = rd.nextInt(100);
如果要包含100 就需要 + 1,例如int i = rd.nextInt(100) + 1;
int i = rd.nextInt(101); - 关于 rd.nextInt(100)+1 和 rd.nextInt(101)之间的区别?
public static void demo2() { Random rd = new Random(); for (int i = 0; i < 100; i++) { System.out.println(rd.nextInt(100)+1); //1-100 System.out.println(rd.nextInt(101)); //0-100 } }
System类
- 系统类 public final class Systemextends Object
这个类被final修饰了,所以该类不能被继承.而且这个类没有提供构造方法,它构造方法被私有了,所以无法创建实例(对象). - static long currentTimeMillis() :获取当前时间的毫秒值。
- static void gc() : 运行垃圾回收器 (回调用finalize方法)
- static Properties getProperties() : 确定当前的系统属性
- static void exit(int status) 终止当前正在运行的 Java 虚拟机。 (最好不用)
- 补充:Object类里面的finalize方法
protected void finalize() 当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。 - 计算时间差
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); }
BigInteger 类
A:BigInteger的概述
* 可以让超过Integer范围内的数据进行运算
BigDecimal 类
- 由于在运算的时候,float类型和double很容易丢失精度,演示案例。
- 所以,为了能精确的表示、计算浮点数,Java提供了BigDecimal
- 不可变的、任意精度的有符号十进制数。
Date类
构造方法
空参 Date() 有参 Date(long 类型)
long getTime() 和 System.currentTimeMillis()方法一样:都是获取当前时间的毫秒值
虽然有些方法过时了,但是也可以继续使用
SimpleDateFormat类
- DateFormat类的概述
- DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。是抽象类,所以使用其子类SimpleDateFormat
- B:SimpleDateFormat构造方法
* public SimpleDateFormat()
* public SimpleDateFormat(String pattern) - C:成员方法
- public final String format(Date date) //格式化日期对象
- public Date parse(String source) //转换时间字符串到日期对象
关于SimpleDateFormat类在开发中的应用,通常为两种:
一:将时间日期对象转化为时间字符串
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);
案例练习(求你来这个世界多少天)
public class Test2 { /** * * A:案例演示 * 需求:算一下你来到这个世界多少天? * 分析: * 1,将生日字符串和今天字符串存在String类型的变量中 * 2,定义日期格式化对象 * 3,将日期字符串转换成日期对象 * 4,通过日期对象后期时间毫秒值 * 5,将两个时间毫秒值相减除以1000,再除以60,再除以60,再除以24得到天 * @throws ParseException */ public static void main(String[] args) throws ParseException { //1,将生日字符串和今天字符串存在String类型的变量中 String birthday = "1983年07月08日"; 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 ); }}
Calendar类
Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR
等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。
成员方法
Calendar.DAY_OF_WEEK 星期
* public static Calendar getInstance()
- JAVASE第14天笔记
- JAVASE学习笔记第14天
- JAVASE第26天笔记
- JAVASE第2天笔记
- JAVASE第3天笔记
- JAVASE第4天笔记
- JAVASE第5天笔记
- JAVASE第6天笔记
- JAVASE第6天笔记
- JAVASE第7天笔记
- JAVASE第8天笔记
- JAVASE第9天笔记
- JAVASE第10天笔记
- JAVASE第11天笔记
- JAVASE第12天笔记
- JAVASE第13天笔记
- JAVASE学习笔记第5天
- JAVASE学习笔记第6天
- 复制多级文件夹
- 六款堪称神器的网站
- 阿里云服务器Apache环境下搭建HTTPS环境并且设置http自动跳转到https
- 数组
- JAVASE第13天笔记
- JAVASE第14天笔记
- 平面上的点
- WebSocket 学习(三)--用nodejs搭建服务器
- Grains
- Andriod菜鸟的成长记
- Reactjs-程序员为什么应该学习Android 开发
- 基于node实现websocket协议
- 游戏策划
- 基于SharePoint Server的权限模型设计