java生日正则表达式_java之正则表达式、日期操作

正则表达式和日期操作

正则表达式简介

正则表达式就是使用一系列预定义的特殊字符来描述一个字符串的格式规则,然后使用该格式规则匹配某个字符串是否符合格式要求。

作用:比如注册邮箱,邮箱有用户名和密码,一般会对其限制长度,这个限制长度的事情就是正则表达式做的

规则

.”和""

"."点儿,在正则表达式中表示任意一个字符。

""在正则表达式中是转意字符,当我们需要描述一个已经被正则表达式使用的特殊字符时,我们就可以通过使用""将其转变为原本的意思。

""在正则表达式中也有一些预定义的特殊内容:

符号

描述

\d

表示任意一个数字

\w

表示任意一个单词字符(只能是 数字,字母,下划线)

\s

表示任意一个空白字符(\t \r \n \f \x0B)

\D

表示任意一个非数字字符

\W

表示任意一个非单词字符

\S

表示任意一个非空白字符

字符集合 []

"[]"用来描述单一字符,方括号内部可以定义这个字符的内容,也可以描述一个范围。

符号

描述

[abc]

表示该字符只能是a或者b或者c

[123]

表示该字符只能是1或者2或者3

[a-z]

表示该字符可以是任意一个小写字母。

[0-9]

来表示该字符可以是任意一个数字

多个范围内选择

**[a-zA-Z0-9_] **表示该字符可以是任意字母,数字以及"下划线"。

"*"、"+"、"?"

通常我们需要描述的字符串会有很多重复出现的元素,但又不需要严格限制出现的次数时,我们就可以使用"*","+"这些量词。

例如:邮箱地址,那么在"@"字符前允许出现若干字符作为用户名。这时候我们就可以使用"\w+"来描述这里至少出现一个单词字符了。

符号

描述

"+"

表示内容可以连续出现至少1次以上

"*"

表示内容出现0-若干次

"?"

表示内容出现0-1次

{n}、{n,}{n,m}

除了前面讲到的量词外,有时我们也需要要求内容出现的次数有具体要求。

比如手机号码。这时我们要求出现的数字就不能是一个模糊的概念了,而必须要求11位。又比如我们要求用户输入密码时,要求密码是6-15位。遇到这类问题是,我们可以使用:

符号

描述

{n}

表示内容必须出现n次

{n,m}

表示内容出现n-m次

{n,}

表示内容出现至少n次

例如,\d{11} 就表示数字只能出现11位,这样就解决了上述的问题。

分组"()","|"

() 可以将内容看做一个整体,()中可以使用"|"来表示或关系。

通过上面的内容,我们还无法解决类似下面的问题:

在描述电话号码时,前面有区号,区号的形式可以是0086或者+86那么我们如何在这两个字符串之间选择?

这时我们可以使用分组"()"。例如

(+86|0086) 表示这里可以是+86或者0086。

"^"和"$"

通过在正则表达式的开始添加"^"以及末尾添加"$"来表示一个整体。

若不使用它们,那么正则表达式只匹配某个字符串的部分内容是否符合格式规则,但使用它们,则要求字符串必须从头到尾都满足该格式规则。

例如

^\w{ 8,10 }$ 表示整体字符串只能出现单词字符8-10个。

java中与正则相关的API

matches方法

matches()方法的参数要求我们传入一个用字符串描述的正则表达式,然后使用该正则

表达式描述的字符串格式规则来匹配当前字符串,若满足那么该方法返回true。否则返回

false。

String emailRegEx ="^[a-zA-Z0-9_.-]+@([a-zA-Z0-9-]+\\.)+[a-zA-Z0-9]{2,4}$";

String email = "bjliyi@tarena.com.cn";

System.out.println(email.matches(emailRegEx));//true

split方法

String[] split(String regex):参数要求传入一个用字符串描述的正则表达式,然后使用该正则表达式描述的字符串规则来匹配当前字符串,并按照满足的部分将字符串拆分。

String str = "java,c#,php,javascript";

String[] array = str.split(",");

//[java,c#,php,javascript]

System.out.println(Arrays.toString(array));

replaceAll方法

String replaceAll(String regex,String replacement):参数要求传入一个用字符串描述的正则表达式和一个需要替换的字符串,然后使用该正则表达式描述的字符串规则来匹配当前字符串,并将满足的部分替换为需要替换的这个字符串。

java中的日期

在java中的日期时间得到的经常不是我们想要的格式这事就需要我们去处理成我们想要的格式,故在此说一下

Date及其常用API

JAVA 中的时间

Java中的时间使用标准类库的Date类表示,是用距离一个固定时间点的毫秒数(可正可负,long类型)表达一个特定的时间点。固定的时间点叫纪元(epoch),是UTC时间1970年 1月 1日 00 : 00 : 00。

UTC(Universal Time Coordinated世界调整时间)与GMT(Greenwich Mean Time格林威治时间)一样,是一种具有实际目的的科学标准时间。

Date类简介

java.util.Date 类封装日期及时间信息。

Date类的大多数用于进行时间分量计算的方法已经被Calendar取代。

原因:因为Date的设计具有"千年虫"以及"时区"的问题,所以Date中的大部分方法已经不建议使用了,它们都被java.util.Calendar类所取代,该类我们稍后会讲。

setTime与getTime方法

void setTime(long time):该方法用于为一个Date对象设置其需要表示的时间,该参数为一个long值,其含义是需要表示的这个时间点距离1970年1月1日 00 : 00 : 00之间的毫秒差。

long getTime():该方法用于获取一个Date对象所表示的时间点,该返回值为一个long值,表示该时间点距离1970年1月1日 00 : 00 : 00之间的毫秒差。

** Date 重写 toString方法**

Date重写了toString()方法,用一个字符串来描述当前Date对象所表示的时间。

格式如下:

Sun Sep 09 15 : 36 : 55 CST 2017

由此我们可以看出,实际上Date的toString()方法返回的字符串虽然很清晰的描述了时间,但是对于非英语地区来讲,该字符串不够友好,我们更希望按照特定地区表示时间的方式。比如我们更习惯以下的风格:

2017-09-09 15 : 36 : 55 星期六

那么有没有方式可以代替 Date的toString()方法来获取一个特定格式的字符串呢?答案是肯定的,java为我们提供了一个类,叫做SimpleDateFormat,该类就可以完成。

SimpleDateFormat

SimpleDateFormat简介

SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。

简单的说,SimpleDateFormat就是根据一个特定的日期格式在字符串与Date之间相互转换。

日期模式匹配字符串

例如: yyyy年MM月dd日--HH : mm : ss 可以匹配 2017年09月09日--13 : 22 : 41

将Date格式化为String

将Date格式化为String,我们需要使用SimpleDateFormat提供的方法: String format(Date d)

Date now = new Date();//默认实例化的Date表示当前系统时间

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

String str = sdf.format(now);

System.out.println(str);//2017-09-09 9:21:12

将String解析为Date

将String格式化为Date,我们需要使用SimpleDateFormat提供的方法: Date parse(String s)

String str = "2008年08月08日 12:22:46";

SimpleDateFormat sdf

= new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");

Date date = sdf.parse(str);

System.out.println(date);// Fri Aug 08 12:22:46 CST 2008

Calendar类

Calendar 简介

java.util.Calendar 类用于封装日历信息,其主要作用在于其方法可以对时间分量进行运算。

Calendar是抽象类,其具体子类针对不同国家的日历系统,其中应用最广泛的是GregorianCalendar(格里高里历,即通用的阳历),对应世界上绝大多数国家/地区使用的标准日历系统。

getInstance()方法

Calendar是抽象类,其提供了一个工厂方法:Calendar getInstance()。该方法可以根据当前系统所在地区获取一个适当的Calendar的子类实现。

设置日期及时间分量

Calendar提供了一种通用的设置时间的方式:

void set(int field,int value):该方法可以通过对不同的时间分量分别设置不同的值。Calendar对不同的时间分量提供了相应的常量,我们在使用set方法设置时,第一个参数就应当使用对应的常量作为时间分量。

Calendar calendar = Calendar.getInstance();//创建出的Calendar表示当前系统时间

//设置年为2008年

calendar.set(Calendar.YEAR,2008);

//设置月为5月

calendar.set(Calendar.Month,4);//月份从0开始

calendar.set(Calendar.Month,Calendar.MAY);//也可以使用常量来设置

//设置日为30日

caneldar.set(Calendar.DAY_OF_MONTH,30);

获取时间分量对应的值

Calendar提供了一种通用的获取时间分量的方式:

int get(int field):该方法可以通过对不同的时间分量获取相应的值。Calendar对不同的时间分量提供了相应的常量,我们在使用get方法获取时,参数就应当使用对应的常量作为时间分量。

Calendar calendar = Calendar.getInstance();

int year = calendar.get(Calendar.YEAR);

int month = calednar.get(Calendar.Month);

int date = calendar.get(Calendar.DAY_OF_MONTH);

//需要注意,月份要加1,因为月份是从0开始的

System.out.println(year+"-"+(month+1)+"-"+date);//2017-1-4

getActualMaximum方法

int getActualMaximum(int field)方法用于获取给定时间分量所允许的最大值

例如:

获取当前系统时间中当月的最后一天(日所允许的最大值)

Calendar calendar = Calendar.getInstance();

int max = calendar. getActualMaximum(Calendar.DAY_OF_MONTH);

System.out.println("当前月的最后一天为:"+max+"日");//当前月的最后一天为31日

add方法

Calendar还允许我们使用统一的方式来对某个时间分量的值进行计算。我们需要使用方法

void add(int field,int amount) 该方法可以为某个时间分量的值加上给定的值,若想减去给定的值,那么传入的值需要是负数即可。并且计算后会自动进行相应的进位,例如若当前为月底,那么加一天后,为下个月的月初,而月就会进位。

例如: 当前系统时间为 2014-01-31日

Calendar calendar = Calendar.getInstance();

//计算明天(在日的基础上加一天)

calendar.add(Calendar.DAY_OF_YEAR,1);//当前Calendar表示的为2017-02-01,月进位了

setTime与getTime方法

Calendar的void setTime(Date date),允许我们为Calendar设置Date对象所表示的时间。

Calendar的 Date getTime(),允许我们获取一个使用Date对象描述的Calendar所表示的时间。

例如:

Calendar calendar = Calendar.getInstance();

Date date = calendar.getTime();

System.out.println(date);// Mon Feb 17 15:36:55 CST 2014

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/441198.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

渲染服务器位置,如何用服务器做渲染

如何用服务器做渲染 内容精选换一换����BoostKit ARMԭ��ʹ���׼������嵥�&#xfffd…

【HDU - 2376】Average distance (树,平均距离,算贡献)

题干: Given a tree, calculate the average distance between two vertices in the tree. For example, the average distance between two vertices in the following tree is (d 01 d 02 d 03 d 04 d 12 d 13 d 14 d 23 d 24 d 34)/10 (63799131510122)/10…

读取ppt并存入数据库_Java解析Excel文件并把数据存入数据库

前段时间做一个小项目,为了同时存储多条数据,其中有一个功能是解析Excel并把其中的数据存入对应数据库中。花了两天时间,不过一天多是因为用了"upload"关键字作为URL从而导致总报同一个错,最后在同学的帮助下顺利解决&a…

两台虚拟服务器如何级联,[教程] 利用open vswitch建立vxlan隧道实现不同主机上的虚拟交换机级联...

写在开头在某些环境下,需要实现两台物理机中的openvswitch交换机级联,以实现两台交换机中的设备互相通讯,这里使用vxlan隧道技术,将数据包封装在UDP中,通过以太网实现数据包传输。VXLAN是一种大二层的虚拟技术&#xf…

【POJ - 3041】Asteroids (二分图,最小点覆盖)

题干&#xff1a; Bessie wants to navigate her spaceship through a dangerous asteroid field in the shape of an N x N grid (1 < N < 500). The grid contains K asteroids (1 < K < 10,000), which are conveniently located at the lattice points of the…

华为虚拟服务器lanip地址,2018软考网络工程师《华为基础实验》十九配置路由器为DHCPServer...

原标题&#xff1a;2018软考网络工程师《华为基础实验》十九配置路由器为DHCPServer实验要求:在R1上使能DHCP 功能。创建三个全局地址池&#xff0c;用于为三个不同部门的PC分配IP 地址。配置地址池的相关属性。在R1的接口下配置基于全局地址池的服务方式&#xff0c;实现DHCP …

电脑重启bootmgr_电脑系统启动:显示0xc0000428怎么办

错误代码&#xff1a;0xc0000428 一般都是驱动问题&#xff0c;只需要找到报错的路径驱动程序&#xff0c;删除再重启就基本上可以解决了。制作一个U盘启动&#xff0c;进入PE&#xff0c;然后删除”\Windoiws\System32\drivers\DsArk64.sys“文件&#xff0c;再重启就可以了。…

【 POJ - 2033 】Alphacode (dp,有坑)

题干&#xff1a; Alice and Bob need to send secret messages to each other and are discussing ways to encode their messages: Alice: "Lets just use a very simple code: Well assign A the code word 1, B will be 2, and so on down to Z being assigned 26.&…

两组的数据平均值合并_不要进入数据陷进

学习统计让我们不再被一些数据迷惑进入数据陷进&#xff08;例如平均工资&#xff09;从而做出正确的决策。描述性统计分析包括数据的分布、集中、波动的测度指标。平均值&#xff1a;一组数据的加和除以数据的个数&#xff08;容易随极端值变化&#xff09; 中位数&#xff1a…

【POJ - 3342】Party at Hali-Bula(树形dp,最大独立集,是否有唯一解)

题干&#xff1a; Dear Contestant, Im going to have a party at my villa at Hali-Bula to celebrate my retirement from BCM. I wish I could invite all my co-workers, but imagine how an employee can enjoy a party when he finds his boss among the guests! So, I…

安川西格玛7驱动器手册_什么是伺服驱动器?选型的原则有哪些?

头条号私信回复1&#xff0c;获取海量免费学习资源&#xff0c;内容包括自动化电气工程师必备的软件、电子书、视频教程等题图&#xff1a;伺服驱动器来源&#xff1a;百度图片什么是伺服驱动器&#xff1f;该如何选型&#xff1f;有哪些主流品牌&#xff1f;你想知道的全在这里…

java猜数游戏图形界面_Java做一个猜数的小游戏

Author &#xff1a; By Runsen效果展现猜数字游戏是一个简单&#xff0c;有趣的小游戏。游戏者通过输入一个指定区间的数字&#xff0c;与系统产生的随机数进行对比&#xff0c;然后输出相应的结果。游戏运行时产生一个0&#xff0d;10之间的随机整数&#xff0c;要求用户从控…

【CodeForces - 266C】Below the Diagonal (递归,子问题,贪心模拟)

题干&#xff1a; You are given a square matrix consisting of n rows and n columns. We assume that the rows are numbered from 1 to n from top to bottom and the columns are numbered from 1to n from left to right. Some cells (n - 1 cells in total) of the t…

python 0o_Python 中的比较:is 与 ==

在 Python 中会用到对象之间比较&#xff0c;可以用 &#xff0c;也可以用 is 。但是它们的区别是什么呢&#xff1f;is 比较的是两个实例对象是不是完全相同&#xff0c;它们是不是同一个对象&#xff0c;占用的内存地址是否相同。莱布尼茨说过&#xff1a;“世界上没有两片完…

python中long类型_浅谈python 四种数值类型(int,long,float,complex)

Python支持四种不同的数值类型,包括int(整数)long(长整数)float(浮点实际值)complex (复数),本文章向码农介绍python 四种数值类型,需要的朋友可以参考一下。 数字数据类型存储数值。他们是不可改变的数据类型,这意味着改变数字数据类型的结果,在一个新分配的对象的值。 N…

【CodeForces - 264A】Escape from Stones (模拟,卡精度的处理)

题干&#xff1a; Squirrel Liss lived in a forest peacefully, but unexpected trouble happens. Stones fall from a mountain. Initially Squirrel Liss occupies an interval [0, 1]. Next, nstones will fall and Liss will escape from the stones. The stones are nu…

python开发mbus程序_Python pywmbus包_程序模块 - PyPI - Python中文网

#WIP WM总线在Python中的实现本项目实施了无线m-bus标准的部分内容&#xff0c;定义见din en 13757-1及以下。目前&#xff0c;只支持未加密的短帧(即ci 0x7a)。欢迎拉取请求。##安装###点pip install pywmbus###手动git clone https://github.com/jalmeroth/pywmbus.gitcd pyw…

【CodeForces - 266B 】Queue at the School (模拟)

题干&#xff1a; During the break the schoolchildren, boys and girls, formed a queue of n people in the canteen. Initially the children stood in the order they entered the canteen. However, after a while the boys started feeling awkward for standing in fr…

查看git当前tag_Git - git tag - 查看当前分支 tag 版本说明

索引&#xff1a;参看代码 GitHub&#xff1a;一、示例&#xff1a;1 git tag -l -n二、说明:1."tag" 部分tag 代表的是标签动作,可以带参数 ,也可以不带参数,带上不同的参数可以实现标签的 新建/删除/查询/验证 等功能.2."-l" 部分-l 注意是字母"L&q…

【CodeForces - 270A】Fancy Fence (几何,思维,水题)

题干&#xff1a; Emuskald needs a fence around his farm, but he is too lazy to build it himself. So he purchased a fence-building robot. He wants the fence to be a regular polygon. The robot builds the fence along a single path, but it can only make fenc…