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
java之正则表达式、日期操作的更多相关文章
- Java中的日期操作
在日志中常用的记录当前时间及程序运行时长的方法: public void inject(Path urlDir) throws Exception { SimpleDateFormat sdf = n ...
- Java中的日期操作 分类: B1_JAVA 2015-02-16 17:55 6014人阅读 评论(0) 收藏
在日志中常用的记录当前时间及程序运行时长的方法: public void inject(Path urlDir) throws Exception { SimpleDateFormat sdf = n ...
- Java经常使用日期操作具体解释
Date类型大多数时间分量计算方法已经被Calendar代替 Date经常用法setTime getTime() new Date();默认获取当前的时间 SimpleDateFormat用来格式化和 ...
- java中的日期操作Calendar和Date
1. Calendar转Date Calendar calendar = Calendar.getInstance(); Date date = calendar.getTime(); 2. Date ...
- Date日期操作
获取年月日时分秒: package com.util; import java.text.DateFormat; import java.util.Calendar; import java.util ...
- java日期操作大全
摘自(http://www.blogjava.net/i369/articles/83483.html) java日期操作 大全 先来一个: 取得指定月份的第一天与取得指定月份的最后一天 http ...
- Java中用正则表达式判断日期格式是否正确
1.Java中用正则表达式判断日期格式是否正确 DateType.java: /** * @Title:DateType.java * @Package:com.you.dao * @Descript ...
- java日期操作常用工具
java日期操作常用工具 package com..util; import java.sql.Timestamp; import java.text.SimpleDateFormat; import ...
- Java常用日期操作
对java中常用的日期操作进行整理. 1.日期格式化 /* * 日期格式化类(必须掌握) * API: * G Era 标志符 Text AD y 年 Year 1996; 96 M 年中的月份 Mo ...
随机推荐
- 洛谷 P1344 [USACO4.4]追查坏牛奶Pollutant Control
题目描述 你第一天接手三鹿牛奶公司就发生了一件倒霉的事情:公司不小心发送了一批有三聚氰胺的牛奶.很不幸,你发现这件事的时候,有三聚氰胺的牛奶已经进入了送货网.这个送货网很大,而且关系复杂.你知道这批牛 ...
- 使用oVal进行Java Bean 验证的注意事项
如果需要不同条件验证不同的属性的时候,需要使用profiles属性,每个校验注解符中都有.注意:oVal默认是启用所有的profiles,所以在对单独一个profile进行启用的时候,需要先disab ...
- 【BZOJ1065】【NOI2008】奥运物流(动态规划)
[BZOJ1065][NOI2008]奥运物流(动态规划) 题面 BZOJ 洛谷 题解 先不考虑环的情况,于是变成了一棵树. 这样子我们答案的贡献是\(\sum_{i=1}^nC_i\times k^ ...
- NOIP2015运输计划题解报告
这题在洛谷上可以找到提交 P2680运输计划 题目背景 公元 2044 年,人类进入了宇宙纪元. 题目描述 L 国有 n 个星球,还有 n-1 条双向航道,每条航道建立在两个星球之间,这 n-1 条航 ...
- 题解【luogu3709 大爷的字符串题】
Description 个人觉得这是这道题最难的一步...出题人的语文... 每次给出一个区间,求这个区间最少能被多少个单调上升的序列覆盖. Solution 这个东西可以转化为这个区间中出现次数最多 ...
- Linux下调整根目录的空间大小
原文 一.目的 在使用CentOS6.3版本Linux系统的时候,发现根目录(/)的空间不是很充足,而其他目录空间有很大的空闲,所以本文主要是针对现在已有的空间进行调整.首先,先来查看一下系统的空间分 ...
- u3d摄像机截图
using System; using UnityEngine; using System.Collections; public class TestCamreaCapture1 : MonoBeh ...
- JS自学大全
JS是从上往下执行的 console.log();输出语句console.warn();错误提示语句 黄色三角形感叹号console.error();错误提示 红色圆Xalert();弹窗docume ...
- Jquery中find与each方法使用详解
本文实例讲述了jQuery中find与each方法用法.分享给大家供大家参考.具体如下: 一.find()方法 jquery选择器非常强大,利用css的命名规约,可以更快更方便的找出想要的元素. 图解 ...
- fastjson的@JSONField注解的一点问题
@JSONField 看源码它可以作用于字段和方法上. 引用网上说的, 一.作用Field @JSONField作用在Field时,其name不仅定义了输入key的名称,同时也定义了输出的名称. 但是 ...