一、正则表达式

1、概念:英语:Regular Expression,在代码中常简写为regex。正则表达式,是一个字符串,使用单个字符串来描述、用来定义匹配规则,匹配一系列符合某个句法规则的字符串。

在开发中,正则表达式通常被用来检索、替换那些符合某个规则的文本。

2、 正则表达式的匹配规则:

JDK中Pattern类中有正则表达式的的规则定义,正则表达式中明确区分大小写字母。

3、正则表达式的语法规则:

字符:x

含义:代表的是字符x

例如:匹配规则为 "a",那么需要匹配的字符串内容就是 ”a”

字符:\\      打一个\打不出来,因为具有转译效果,让后面的字符失去效果

所以再加一个\,让后面的\为一个普通的\

含义:代表的是反斜线字符'\'

例如:匹配规则为"\\" 那么需要匹配的字符串内容就是 ”\”

字符:\t

含义:制表符

例如:匹配规则为"\t" ,那么对应的效果就是产生一个制表符的空间

字符:\n

含义:换行符

例如:匹配规则为"\n",那么对应的效果就是换行,光标在原有位置的下一行

字符:\r

含义:回车符

例如:匹配规则为"\r" ,那么对应的效果就是回车后的效果,光标来到下一行行首

字符类:[abc]

含义:代表的是字符a、b 或 c

例如:匹配规则为"[abc]" ,那么需要匹配的内容就是字符a,或者字符b,或字符c的一个

字符类:[^abc]

含义:代表的是除了 a、b 或 c以外的任何字符

例如:匹配规则为"[^abc]",那么需要匹配的内容就是不是字符a,或者不是字符b,或不是字符c的任意一个字符

字符类:[a-zA-Z]

含义:代表的是a 到 z 或 A 到 Z,两头的字母包括在内

例如:匹配规则为"[a-zA-Z]",那么需要匹配的是一个大写或者小写字母

字符类:[0-9]

含义:代表的是 0到9数字,两头的数字包括在内

例如:匹配规则为"[0-9]",那么需要匹配的是一个数字

字符类:[a-zA-Z_0-9]

含义:代表的字母或者数字或者下划线(即单词字符)

例如:匹配规则为" [a-zA-Z_0-9] ",那么需要匹配的是一个字母或者是一个数字或一个下滑线

预定义字符类:.

含义:代表的是任何字符

例如:匹配规则为" . ",那么需要匹配的是一个任意字符。如果,就想使用 . 的话,使用匹配规则"\\."来实现

预定义字符类:\d

含义:代表的是 0到9数字,两头的数字包括在内,相当于[0-9]

例如:匹配规则为"\d ",那么需要匹配的是一个数字

\D  代表的是非数字

预定义字符类:\w

含义:代表的字母或者数字或者下划线(即单词字符),相当于[a-zA-Z_0-9]

例如:匹配规则为"\w ",,那么需要匹配的是一个字母或者是一个数字或一个下滑线

边界匹配器:^

含义:代表的是行的开头

例如:匹配规则为^[abc][0-9]$ ,那么需要匹配的内容从[abc]这个位置开始, 相当于左双引号

边界匹配器:$

含义:代表的是行的结尾

例如:匹配规则为^[abc][0-9]$ ,那么需要匹配的内容以[0-9]这个结束, 相当于右双引号

边界匹配器:\b

含义:代表的是单词边界

例如:匹配规则为"\b[abc]\b" ,那么代表的是字母a或b或c的左右两边需要的是非单词字符([a-zA-Z_0-9])

数量词:X?

含义:代表的是X出现一次或一次也没有

例如:匹配规则为"a?",那么需要匹配的内容是一个字符a,或者一个a都没有

数量词:X*

含义:代表的是X出现零次或多次

例如:匹配规则为"a*" ,那么需要匹配的内容是多个字符a,或者一个a都没有

数量词:X+

含义:代表的是X出现一次或多次

例如:匹配规则为"a+",那么需要匹配的内容是多个字符a,或者一个a

数量词:X{n}

含义:代表的是X出现恰好 n 次

例如:匹配规则为"a{5}",那么需要匹配的内容是5个字符a

数量词:X{n,}

含义:代表的是X出现至少 n 次

例如:匹配规则为"a{5, }",那么需要匹配的内容是最少有5个字符a

数量词:X{n,m}

含义:代表的是X出现至少 n 次,但是不超过 m 次

例如:匹配规则为"a{5,8}",那么需要匹配的内容是有5个字符a 到 8个字符a之间

4.课堂练习

package com.oracle.demo01;
// 字符类中涉及正则表达式的常用方法
public class demo01 { public static void main(String[] args) {
// 校验qq号码.
// 1: 要求必须是5-15位数字
// 2: 0不能开头
String regex="[1-9][0-9]{4,14}";
String str="895949735";
boolean f=str.matches(regex);
System.out.println(f);
// 校验手机号码
// 1:要求为11位数字
// 2:第1位为1,第2位为3、4、5、7、8中的一个,后面9位为0到9之间的任意数字。
String re="1[3457][\\d]{9}";
String st="13345678911";
boolean f1=st.matches(re);
System.out.println(f1);
//分割规则 split
String str1="138-6564-8987";
String regex1="-";
String[] strr=str1.split(regex1);
//增强for
// for(定义你要遍历数组和集合的一个变量 起个名称:数组或集合名称){
// System.out.println(起的名字); // }
for(String a:strr){
System.out.println(a);
}
//按照规则替换字符串 replaceAll
String str2="java ai wo wo ai java";
String regex2="a";
String s=str.replaceAll(regex2,"b");
System.out.println(s);
//匹配合法的邮箱
String regex3="[a-zA-Z0-9_]+@[a-zA-Z0-9]+\\.[a-zA-Z]+";
String str3="895949735@qq.com";
boolean bo=str3.matches(regex3);
System.out.println(bo);
} }
package com.oracle.demo01;
//正则表达式 练习
import java.util.Scanner;
public class demo02 { public static void main(String[] args) {
//1.对输入的qq号进行匹配(qq匹配规则:长度为5-10位,纯数字组成,且不能以0开头。)
// String regex="[1-9][0-9]{4,9}";
// System.out.println("请输入您的QQ号");
// Scanner sc=new Scanner(System.in);
// String str=new String(sc.next());
// boolean f=str.matches(regex);
// if(f==true){
// System.out.println("QQ号匹配成功");
// }else{
// System.out.println("QQ号输入错误");
// }
//
// //2.对输入的电话号码进行匹配(匹配要求:匹配成功的电话号码位数为11位的纯数字,且以1开头,
// //第二位必须是:3、7、8中的一位,即只匹配13*********、17*********、18*********的电话号码)。
// String regex2="1[378][0-9]{9}";
// System.out.println("请输入电话号码");
// String str2=new String(sc.next());
// boolean f1=str.matches(regex);
// if(f1==true){
// System.out.println("手机号验证正确");
// }else{
// System.out.println("手机号号输入错误");
// }
//3.对字符串“张三@@@李四@@王五@茅台”进行切割,去掉@符号。
String str3="张三@@@李四@@王五@茅台";
String regex3="@";
String[] attr=str3.split(regex3);
for(String a:attr){
System.out.print(a);
}
System.out.println();
// 4.【以叠词切割】:如字符串"abccsasahhhz"按“叠词”来切割就变成了“ab”,“sasa”,“z”。
// 因为“cc”、“hhh”都是叠词,需要切割掉。现在请将字符串“张三@@@李四¥¥王五ssssssss江流儿”按照叠词切割。
String str4="张三@@@李四¥¥王五ssssssss江流儿";
// ()来表示组,那么组是干嘛的?我们就可以 对组中的数据进行引用:那么regex = "(.)\\1"就表示:
// 某一字符出现了两次(注意首先我们用(.)来表示任意字符,而\\1是对组(.)中的字符进行复用,合起来就是:两个相同的字符),
// 现在我们不只是需要出现两次的字符,所以使用+号来表示出现多次,最终叠词就表示为:regex = "(.)\\1+"。
String regex4="(.)\\1+";
String[] attr2=str4.split(regex4);
for(String a:attr2){
System.out.print(a);
}
System.out.println();
//5.将字符串“张三@@@李四YYY王五*****王尼玛”中的叠词替换为:“、”。
String str5=str4.replaceAll(regex4, "、");
System.out.println(str5); } }

 二、Date类

概念:Date类为时间类,表示特定的瞬间,精确到毫秒。

   毫秒概念:1000毫秒==1秒

   当前时间所转换成毫秒值  语言格式:

long name=System.currentTimeMillis();

输出结果:

    注意:返回值long类型参数。

     时间的原点:公元1970年 一月一日,午夜0:00:00 对应的毫秒值就是0

    注意:时间和日期的计算,必须依赖毫秒值

Date类的构造函数:

常用方法:getTime(); 目的:把日期对象转换成对应的时间毫秒值

//空参构造,代表当前系统时间的日期对象。
Date d=new Date();
System.out.println(d);
//long传参构造,小括号里传的是毫秒值,转变为时间日期格式,记得在毫秒值最后 加上 L 表明是long数据类型
Date d2=new Date(2099900325650l);
System.out.println(d2);
//getTime():获取日期对象的毫秒值(Date对象转毫秒值的方法)
System.out.println(d.getTime());
System.out.println(d2.getTime())

输出结果:

 三、DateFormat类

概念:DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间

   通过这个类可以帮我们完成日期和文本之间的转换。

日期格式:

   DateFormat是抽象类,我们需要使用其子类SimpleDateFormat来创建对象

        

构造方法:DateFormat类方法

1.foamat方法: 用来将Date对象转换成String

   

//对日期格式化,设置成自己想要的格式   加空格后也会相应的显示出来
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd月 HH:mm:ss");
//空参构造为当前时间
Date d=new Date();
//将日期转为字符串 String name=format(date); ( 将一个date日期格式化为制定好的格式 )
String date=sdf.format(d);
System.out.println(date);

 运行结果:

2.parse方法:用来将String转换成Date(转换时,该String要符合指定格式,否则不能转换)。

SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日");
String str=new String("3003年09月26日");
Date d=sdf.parse(str);
System.out.println(d);

运行结果:

四、Calendar类(日历类)

概念:

Calendar是日历类,在Date后出现,替换掉了许多Date的方法。该类将所有可能用到的时间信息封装为静态成员变量,方便获取。

Calendar为抽象类,由于语言敏感性,Calendar类在创建对象时并非直接创建,而是通过静态方法创建,将语言敏感内容处理好,再返回子类对象。

 Calendar类静态方法:

Calendar c=Calendar.getInstance();     //返回当前时间

 打印结果:

java.util.GregorianCalendar[time=1527580612238,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2018,MONTH=4,WEEK_OF_YEAR=22,WEEK_OF_MONTH=5,DAY_OF_MONTH=29,DAY_OF_YEAR=149,DAY_OF_WEEK=3,DAY_OF_WEEK_IN_MONTH=5,AM_PM=1,HOUR=3,HOUR_OF_DAY=15,MINUTE=56,SECOND=52,MILLISECOND=238,ZONE_OFFSET=28800000,DST_OFFSET=0]
//可以看到,已经将所有有关时间的信息都打印了出来

 Calendar类常用方法:

语法格式:public static Calendar getInstance()     获取日期对象

     public int get(int field)                            获取时间字段值

       public void add(int field,int amount)       指定字段增加某值

public final void set(int field,int value)    设置指定字段的值

public final Date getTime()                    获取该日历对象转成的日期对象

        //首先获取日期对象,才从对象中提取想要提取的时间信息
     Calendar c=Calendar.getInstance();
//获取当前年份
System.out.println(c.get(Calendar.YEAR));
//每一周的哪一天,需要-1 才是正确显示的日期
System.out.println(c.get(Calendar.DAY_OF_WEEK)-1);
//月份需要+1 才是正确显示的月份
System.out.println(c.get(Calendar.MONTH)+1);
System.out.println(c.get(Calendar.DATE));
//向后偏移三天 +3天
c.add(Calendar.DATE, 3);
//将日历类转变为日期类
Date d=c.getTime();
System.out.println(d);
//设置指定日期 set
c.set(Calendar.YEAR,2098);
c.set(Calendar.MONTH, 6);
c.set(Calendar.DATE, 6);
     //第二种设置方法
c.set(2055, 10, 30);
Date da=c.getTime();
System.out.println(da);

打印结果:

  注   意  :

1.西方星期的开始为周日,中国为周一。

2.在Calendar类中,月份的表示是以0-11代表1-12月。

3.日期是有大小关系的,时间靠后,时间越大。

 时间类练习题:

import java.util.Scanner;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date; public class Demo1 { public static void main(String[] args) throws ParseException {
// 1.如何获取当前的月份?
one();
//2.如何知道现在距离指定的时间还有多久?
two();
//3.请将当前日期按照"2018年4月3日 22点22分22秒"打印在控制台
three();
//4.请将"2068年3月3日 15:07:04:"转成date类型打印在控制台
four();
//5.控制台输入一个人的生日,判断截至到当前日期他活了多少个月?
five(); }
//第一题
public static void one(){
Calendar c=Calendar.getInstance();
System.out.println("当前月份是:"+(c.get(Calendar.MONTH)+1)+"月");
}
//第二题
public static void two(){
//获取当前的毫秒值
long today=System.currentTimeMillis();
//设置指定的时间
Calendar c=Calendar.getInstance();
c.set(2999,11,31);
//将日历类转为日期类
Date d=c.getTime();
//获取指定时间的毫秒值
long dday=d.getTime();
long day=(dday-today)/1000/60/60/24;
System.out.println("距离指定的时间还有"+day+"天");
}
//第三题
public static void three(){
//对日期格式化,设置成自己想要的格式 加空格后也会相应的显示出来
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
//空参构造为当前时间
Date d=new Date();
//将日期转为字符串 String name=format(date); ( 将一个date日期格式化为制定好的格式 )
String date=sdf.format(d);
System.out.println(date);
}
//第四题
public static void four() throws ParseException{
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String str=new String("2068年3月3日 15:07:04");
Date d=sdf.parse(str);
System.out.println(d);
}
//第五题
public static void five(){
Scanner sc=new Scanner(System.in);
System.out.println("请输入出生年");
int y=sc.nextInt();
System.out.println("请输入出生月");
int m=sc.nextInt();
System.out.println("请输入出生日");
int d=sc.nextInt();
//将输入的年月日添加到日历类中
Calendar c=Calendar.getInstance();
c.set(y, m, d);
//获取今天的毫秒数
long today=System.currentTimeMillis();
//转换成日期类
Date da=c.getTime();
//转换成毫秒数
long birth=da.getTime();
//算出多少月
long month=(today-birth)/1000/60/60/24/30;
System.out.println("出生至今共活了"+month+"个月");
}
}

Java学习(正则表达式、Date类、DateFormat类、Calendar类)的更多相关文章

  1. Date、DateFormat和Calendar类的简单认识

    第三阶段 JAVA常见对象的学习 Date.DateFormat和Calendar类的简单认识 Date类 Date:表示特定的瞬间,精确到毫秒. (一) 构造方法: Date():根据当前的默认毫秒 ...

  2. Math、Random、System、BigInteger、Date、DateFormat、Calendar类,正则表达式_DAY14

    1:Math&大数据类四则运算 X abs(X x) double random()         产生随机数 double ceil(double a)   向上取整 double flo ...

  3. java ->Date、DateFormat、Calendar类

    Date类概述 类 Date 表示特定的瞬间,精确到毫秒. 毫秒概念:1000毫秒=1秒 毫秒的0点: System.currentTimeMillis()  相当于Date d = new Date ...

  4. Java—包装类、Date和SimpleDateFormat、Calendar类

    包装类 基本数据类型不能调用方法,功能简单,为了让基本数据类型也具备对象的特性,Java为每个基本数据类型提供了一个包装类,这样就可以像操作对象那样来操作基本数据类型. 基本类型和包装类之间的对应关系 ...

  5. 16_常用API_第16天(正则表达式、Date、DateFormat、Calendar)_讲义

    今日内容介绍 1.正则表达式的定义及使用 2.Date类的用法 3.Calendar类的用法 ==========================================第一阶段======= ...

  6. 常用API(正则表达式、Date、DateFormat、Calendar)

    常用API 今日内容介绍 u 正则表达式 u Date u DateFormat u Calendar 第1章 正则表达式 1.1 正则表达式的概念 正则表达式(英语:Regular Expressi ...

  7. JAVA常用API(Date、DateFormat、Calendar、System、Math、基本数据类型包装类)

    注:本文所有内容均属个人见解,如有错误望各位大佬好心指点批评,不胜感激 本章重点单词: parse:解析 format:格式化 pattern:模式 amount:数量 filed :领域 1.Dat ...

  8. [常用类]时间内Date、SimpleDateFormat、Calendar类

    Date类的概述是util包下的,不能导入sql包的.* 类 Date 表示特定的瞬间,精确到毫秒. *构造方法 * public Date() * public Date(long date) 如果 ...

  9. java时间日期类(Date、DateFormat、Calendar)学习

    1.Date类 常用方法:long getTime(),用于返回当前时刻的毫秒值 Date d = new Date(2000); System.out.println(d.getTime());// ...

  10. Java基础学习笔记十三 常用API之正则表达式、Date、DateFormat、Calendar

    正则表达式 正则表达式(英语:Regular Expression,在代码中常简写为regex).正则表达式是一个字符串,使用单个字符串来描述.用来定义匹配规则,匹配一系列符合某个句法规则的字符串.在 ...

随机推荐

  1. python3.5无法安装pip,报错ImportError: cannot import name 'HTTPSHandler'

    本人系统为:centos6 解决方法: 1  安装openssl yum install openssl 2  安装openssl-devel yum install openssl-devel 3  ...

  2. socket利用多线程实现一对多通信

    1.服务器端:socket()建立套接字,绑定(bind)并监听(listen),用accept()等待客户端连接.将accept()写入死循环,每次连接一个客户端,开一个线程. 2.一般情况下建立s ...

  3. 服务器安全策略之《通过IP安全策略阻止某个IP访问的设置方法》

    现在我们在布署好了一个网站,发布到外网后就意味着将会接受来自四面八方的黑客攻击,这个情况很常见,我们的网站基本上每天都要接受成千上万次的攻击,有SQL注入的.有代码注入的.有CC攻击等等...而我作为 ...

  4. 科学计算三维可视化---TVTK入门(创建和显示三维对象)

    一:创建一个基本的三维对象 (一)长方体操作 traits:就是TVTK对象的属性 (1)对象属性操作 >>> from tvtk.api import tvtk >>& ...

  5. linux下sudo命令

    [userld@redhat2 root]$ sudo ls We trust you have received the usual lecture from the local System Ad ...

  6. python操作mongo脚本

    #!/usr/bin/python# -*- coding: utf-8 -*- import sysimport osimport jsonfrom pymongo import MongoClie ...

  7. 【专题】平衡树(Treap,fhq-treap)

    [旋转] 平衡树中的旋转是指在不改变中序遍历的前提下改变树的形态的方式.(中序遍历=排名顺序) 右旋将当前点的左节点旋上来,左旋反之.(图侵删) void rturn(int &k){ int ...

  8. 20155235 2016-2017-2 《Java程序设计》第5周学习总结

    20155235 2016-2017-2 <Java程序设计>第5周学习总结 教材学习内容总结 第八章知识点 语法与继承结构 使用try.catch 异常继承结构 要抓还是要抛 贴心还是造 ...

  9. thinkphp 修改分页样式表

    原网页:http://blog.csdn.net/u014175572/article/details/53116546 在这里我有先把page的设置做成了一个函数getpage, 将这个方法放到Ap ...

  10. hdu 1253 胜利大逃亡 (广搜)

    题目链接 Problem Description Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会. 魔王住在一个城堡里,城堡是一个ABC的立方体,可以被表示成A个 ...