day14-Java正则表达式Math类日期类

14.01_常见对象(正则表达式的概述和简单使用)

  • A:正则表达式
    • 是指一个用来描述或者匹配一系列符合某个语法规则的字符串的单个字符串。其实就是一种规则。有自己特殊的应用。
    • 作用:比如注册邮箱,邮箱有用户名和密码,一般会对其限制长度,这个限制长度的事情就是正则表达式做的
// 正则表达式  校验QQ
String regex = "[1-9]\\d{4,14}";
System.out.println("1234567".matches(regex));

14.02_字符类正则

字符类  []代表单个字符的匹配
[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](减去)

System.out.println("u".matches("[^abc]"));  //true
System.out.println("uP".matches("[^abc]"));  //false ,因为[]只匹配单个字符

14.03_预定义字符类正则

预定义字符类 
. 任何字符(与行结束符可能匹配也可能不匹配) 
\d 数字:[0-9] 
\D 非数字: [^0-9] 
\s 空白字符:[ \t\n\x0B\f\r] 
\S 非空白字符:[^\s] 
\w 单词字符:[a-zA-Z_0-9] 
\W 非单词字符:[^\w] 

14.04_常见对象(数量词)

// Greedy 数量词
X? X,一次或一次也没有 
X* X,零次到多次 
X+ X,一次或多次 
X{n} X,恰好 n 次 
X{n,} X,至少 n 次 
X{n,m} X,至少 n 次,但是不超过 m 次 

System.out.println("a".matches("[abc]?")); //true 出现了a
System.out.println("y".matches("b?")); //false ,b是一次也没有,但是还有其他字符
System.out.println("".matches("\\d?"));//true 数字一次也没有出现
System.out.println("22222".matches("[2]{3,}")); //true 2自少3次,切只能是2

14.05_正则表达式的分割功能

  • A:正则表达式的分割功能
    • String类的功能:public String[] split(String regex)
// 1.正则表达分割字符串  要求: 以 - 分割开
String s = "qwe-asd-zxc-12355";
String[] arr = s.split("-");
System.out.println(Arrays.toString(arr));

String s2 = "www.rrr.xxoo.ppp";
String[] arr2 = s2.split("\\.");  //这里比较 特殊,需要用2个\\来转义
System.out.println(Arrays.toString(arr2));

14.06_常见对象(把给定字符串中的数字排序)

  • A:案例演示
    • 需求:我有如下一个字符串:”91 27 46 38 50”,请写代码实现最终输出结果是:”27 38 46 50 91”
String s = "91 27 46 38 50 100";
String[] arr = s.split(" ");  //分割字符串

int[] intArr = new int[arr.length];
for (int i = 0; i < arr.length; i++) { //字符串数组转为int数组
    intArr[i] = Integer.parseInt(arr[i]);
}

Arrays.sort(intArr);  //int数组排序
System.out.println(Arrays.toString(intArr));

14.07_正则表达式的替换功能

  • A:正则表达式的替换功能
    • String类的功能:public String replaceAll(String regex,String replacement)
String s = "xxoo123qwer";
// \\d代表任意数字
System.out.println(s.replaceAll("\\d", "-")); //输出:xxoo---qwer

14.08_常见对象(正则表达式的分组功能)

  • A:正则表达式的分组功能
    • 捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C))) 中,存在四个这样的组:
  •   1     ((A)(B(C))) 
      2     (A 
      3     (B(C)) 
      4     (C) 
    
      组零始终代表整个表达式。
    
 // 叠词 快快乐乐 ,高高兴兴
 // "\\1"代表第一组(.)再出现一次 \\2 也代表第二组再出现一次
String regex = "(.)\\1(.)\\2";  
System.out.println("快快乐乐".matches(regex));   //true
System.out.println("xoxo".matches(regex));   //false

System.out.println("高兴高兴".matches("(..)\\1"));  //true

// 第一题: 需求:请按照叠词切割: "sdqqfgkkkhjppppkl";
String s = "sdqqfgkkkhjppppkl";
String[] arr = s.split("(.)\\1+"); // \\1+ 代表一次或多次
System.out.println(Arrays.toString(arr));
        
// 第二题:需求:我我....我...我.要...要要...要学....学学..学.编..编编.编.程.程.程..程
String ss1 = "我我....我...我.要...要要...要学....学学..学.编..编编.编.程.程.程..程";

String ss2 = ss1.replaceAll("\\.", ""); // 1.去掉.
String ss3 = ss2.replaceAll("(.)\\1+", "$1"); // 2. $1代表第一组的内容(.)
System.out.println(ss3);

14.09_Pattern和Matcher的概述

  • A:PatternMatcher的概述
  • B:模式和匹配器的典型调用顺序
    • 典型的调用顺序是
Pattern p = Pattern.compile("a*b"); // 获取正则表达式  a*b a出现0次或多次,后面跟上b
Matcher m = p.matcher("aaaaab"); // 获取匹配器
boolean b = m.matches(); //获取匹配结果

//上面三句,等价于:下面底层的实现就是上面的3句
System.out.println("aaab".matches("a*b"));

14.10_常见对象(正则表达式的获取功能)

  • A:正则表达式的获取功能
    • PatternMatcher的结合使用
// 获取字符串中的两个手机号
String s = "么么哒XXOO13509801846,我日18518607465";

Pattern p = Pattern.compile("1[3578]\\d{9}");  //手机号码正则表达式
Matcher m = p.matcher(s);

while (m.find()) 
    System.out.println(m.group());

14.11_Math类概述和方法使用

Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。

  • B:成员方法
public static int max(int a,int b)   //两个数的最大值  min自学
System.out.println(Math.PI); // 圆周率PI,常量
System.out.println(Math.abs(-12.5)); //结果 12.5  绝对值
System.out.println(Math.ceil(12.123)); //结果 13.0  向上取整,但是结果是double
System.out.println(Math.ceil(12.999)); //结果 13.0
System.out.println(Math.floor(12.123)); //结果 12.0  向下取整,但是结果是double
System.out.println(Math.floor(12.999)); //结果 12.0
System.out.println(Math.pow(2, 3));  //求n次方 ,这里就是2的3次方
System.out.println(Math.random()); //生成0.0到1.0之间的随机数,包括0.0,不包括1.0
System.out.println(Math.round(12.6F)); //四舍五入
System.out.println(Math.sqrt(12.4));  //开平方

14.12_Random类的概述和方法使用

  • A:Random类的概述
    • 此类用于产生随机数如果用相同的种子创建两个 Random 实例,
    • 则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列。
  • B:构造方法
    • public Random()
    • public Random(long seed)
  • C:成员方法
    • public int nextInt()
    • public int nextInt(int n)(重点掌握)
Random r = new Random();
for (int i = 0; i < 10; i++) {  //循环10次,生成随机数
    int x = r.nextInt(100); // 0-100 包括0,不包括100
    System.out.println(x);
}

14.13_System类的概述和方法使用

System 类包含一些有用的类字段和方法。它不能被实例化。

// 一个源文件中,不允许定义两个 public class

System.gc();  //运行垃圾回收器
System.exit(0); //退出Java虚拟机
long time = System.currentTimeMillis();  //返回当前系统的毫秒值(1970年至今的时间差)

int[] src = {11,22,33,44,55};
int[] dest = new int[8];
//数组的拷贝,这个是集合的底层实现
System.arraycopy(src, 0, dest, 0, src.length);
System.out.println(Arrays.toString(dest));

14.14_BigInteger类的概述和方法使用

  • A:BigInteger的概述:可以让超过Integer范围内的数据进行运算
  • B:构造方法
    • public BigInteger(String val)
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); //得到 除数 和 余数 (除法和取模)
System.out.println(Arrays.toString(arr));

14.15_BigDecimal类的概述和方法使用

  • 由于在运算的时候,float类型和double很容易丢失精度,演示案例。
  • 所以,为了能精确的表示、计算浮点数,Java提供了BigDecimal
  • 不可变的、任意精度的有符号十进制数。
  • BigDecimal和上面的BigInteger有一样的方法名,都有加减乘除等。
System.out.println(2.0 - 1.1); //结果是 0.89... 精度有问题。。        

// 推荐使用字符串的形式,double不推荐, 精度不如字符串
BigDecimal bd1 = new BigDecimal("2.0");
BigDecimal bd2 = new BigDecimal("1.1");
System.out.println(bd1.subtract(bd2));

// 或者
BigDecimal bd3 = BigDecimal.valueOf(2.0);
BigDecimal bd4 = BigDecimal.valueOf(1.1);
System.out.println(bd3.subtract(bd4));

14.16_Date类的概述和方法使用

  • A:Date类的概述:Date 表示特定的瞬间,精确到毫秒
  • B:构造方法
    • public Date() 代表当前时间
    • public Date(long date) 传0代表1970年1月1号
  • C:成员方法
    • public long getTime() 获取Date对象毫秒值
    • public void setTime(long time) 设置毫秒,在1970年1月1号基础加上此毫秒值

14.17_SimpleDateFormat类实现日期和字符串的相互转换

  • DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。是抽象类,所以使用其子类SimpleDateFormat
Date d1 = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
System.out.println(df.format(d1)); //将日期转为字符串

//将时间字符串 转为 日期对象
String str = "2008-10-12 15:00:00";
SimpleDateFormat df2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d2 = df2.parse(str);
System.out.println(d2);

14.18_你来到这个世界多少年案例

// 1.将生日字符串和今天字符串存在string中
String birthday = "1999年07月14日";
String today = "2016年12月09日";

// 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,/365 得到年
System.out.println(time / 1000 / 60 / 60 / 24 / 365);

14.19_Calendar类的概述和获取日期的方法

Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。

Calendar c = Calendar.getInstance(); //父类对象指向子类对象
System.out.println(c.get(Calendar.YEAR)); //得到年
System.out.println(c.get(Calendar.MONTH)+1); //得到月,注意是从0开始的,加是正常的
System.out.println(c.get(Calendar.DAY_OF_MONTH));//得到日
System.out.println(c.get(Calendar.WEEK_OF_MONTH));//得到第几周
System.out.println(c.get(Calendar.DAY_OF_WEEK));//得到周内第几天(周日为1,周一为2...)

System.out.println(getWeek(c.get(Calendar.DAY_OF_WEEK)));

public static String getWeek(int week) {
    if (week > 7 || week < 1) return "";
    //因为 Calendar.DAY_OF_WEEK 返回的是 1-7,1是星期日,2是星期一,类推的..
    String[] arr = {"","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
    return arr[week];
}

14.20_Calendar类的add()和set()方法

//Date转为 Calendar
Calendar c1 = Calendar.getInstance();
c1.clear();
c1.setTime(new Date());;

Calendar c = Calendar.getInstance(); //父类对象指向子类对象
//  c.add(Calendar.YEAR, 1);  //年份加1一年,(负数就是减)
c.add(Calendar.MONTH, -2);  //减去2个月,年份会自动变的,比如1月减2个月,就是上一年了

c.set(Calendar.YEAR, 2015); //修改年份
c.set(2017, 11, 12);  //修改为 2017-12-12 ,注意,月份是从0开始,所以11就是12月

//Calendar转为Date
Date date = c.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(sdf.format(date));

14.21_如何获取任意年份是平年还是闰年)

// 判断是闰年还是平年, 2月是29天是闰年,否则是平年

Scanner sc = new Scanner(System.in);
System.out.println("请输入年份,判断该年份是闰年还是平年...");
int year = sc.nextInt();
sc.close();

Calendar c = Calendar.getInstance();
c.clear();
c.set(year, 2, 1);  //设置为 那一年的3月1日
c.add(Calendar.DAY_OF_MONTH, -1); //将日向前减去1,就是2月的最后一天
//判断是否是29天
if (29 == c.get(Calendar.DAY_OF_MONTH)) {
    System.out.println("您输入的是闰年..");
}else {
    System.out.println("您输入的是平年..");
}

END。
我是小侯爷。
在魔都艰苦奋斗,白天是上班族,晚上是知识服务工作者。
如果读完觉得有收获的话,记得关注和点赞哦。
非要打赏的话,我也是不会拒绝的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,378评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,356评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,702评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,259评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,263评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,036评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,349评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,979评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,469评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,938评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,059评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,703评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,257评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,262评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,501评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,792评论 2 345

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,581评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,599评论 18 139
  • 最近学习到第 23 天了,还有 4 天时间我的 JavaSE 课程就要结束了,之后会有一个考试,需要复习一下,正好...
    SawyerZh阅读 1,034评论 0 11
  • 一、 1、请用Java写一个冒泡排序方法 【参考答案】 public static void Bubble(int...
    独云阅读 1,348评论 0 6
  • 今天周日,下午到附近的图书馆看了看书。 随手在文学类找了一本《别对我撒谎》,一开始以为是本小说,看了简介才知道是一...
    淡茶嘚香味阅读 96评论 0 0