正则表达式和日期操作

正则表达式简介

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

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

规则

.”和""

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

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

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

符号 描述
\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之正则表达式、日期操作的更多相关文章

  1. Java中的日期操作

    在日志中常用的记录当前时间及程序运行时长的方法: public void inject(Path urlDir) throws Exception { SimpleDateFormat sdf = n ...

  2. Java中的日期操作 分类: B1_JAVA 2015-02-16 17:55 6014人阅读 评论(0) 收藏

    在日志中常用的记录当前时间及程序运行时长的方法: public void inject(Path urlDir) throws Exception { SimpleDateFormat sdf = n ...

  3. Java经常使用日期操作具体解释

    Date类型大多数时间分量计算方法已经被Calendar代替 Date经常用法setTime getTime() new Date();默认获取当前的时间 SimpleDateFormat用来格式化和 ...

  4. java中的日期操作Calendar和Date

    1. Calendar转Date Calendar calendar = Calendar.getInstance(); Date date = calendar.getTime(); 2. Date ...

  5. Date日期操作

    获取年月日时分秒: package com.util; import java.text.DateFormat; import java.util.Calendar; import java.util ...

  6. java日期操作大全

    摘自(http://www.blogjava.net/i369/articles/83483.html) java日期操作 大全 先来一个:  取得指定月份的第一天与取得指定月份的最后一天  http ...

  7. Java中用正则表达式判断日期格式是否正确

    1.Java中用正则表达式判断日期格式是否正确 DateType.java: /** * @Title:DateType.java * @Package:com.you.dao * @Descript ...

  8. java日期操作常用工具

    java日期操作常用工具 package com..util; import java.sql.Timestamp; import java.text.SimpleDateFormat; import ...

  9. Java常用日期操作

    对java中常用的日期操作进行整理. 1.日期格式化 /* * 日期格式化类(必须掌握) * API: * G Era 标志符 Text AD y 年 Year 1996; 96 M 年中的月份 Mo ...

随机推荐

  1. 【HDU5919】SequenceII(主席树)

    [HDU5919]SequenceII(主席树) 题面 Vjudge 翻译(by ppl) 给一个长度为N的数列A,有m个询问,每次问 数列[l,r]区间中所有数的第一次出现的位置的中位 数是多少 题 ...

  2. [HEOI2015]公约数数列

    不错的分块题 gcd和xor其实并没有联系 这里,xor的按位性质没有半点卵用 gcd的性质却很关键: 一个数组,前缀gcd最多logn个不同的 gcd不太多,(暴力的基础) 所有考虑分块. 分块,每 ...

  3. Hexo之我的桌角女友的食用方式

    秀秀 通过使用一个名为 hexo-helper-live2d 的开源库,可以轻松的在自己的Hexo网站下贴上一只生猛可爱的萌妹子或主子: 什么是live2d Live2d是11区宅男们开发出的虚拟女友 ...

  4. 机器学习算法的Python实现 (1):logistics回归 与 线性判别分析(LDA)

    先收藏............ 本文为笔者在学习周志华老师的机器学习教材后,写的课后习题的的编程题.之前放在答案的博文中,现在重新进行整理,将需要实现代码的部分单独拿出来,慢慢积累.希望能写一个机器学 ...

  5. springsecurity 表达式一览

    表达式 描述 hasRole([role]) 当前用户是否拥有指定角色. hasAnyRole([role1,role2]) 多个角色是一个以逗号进行分隔的字符串.如果当前用户拥有指定角色中的任意一个 ...

  6. linux之nginx的安装

    (一)这次是自己折腾服务器的环境,所以自己算是都装过一遍,在装的过程中也是在网上搜索,其实最后在公司运维的指导下知道自己安装出错在哪里的.不说了,直接说安装和问题 (二):首先从 http://ngi ...

  7. webpack4.0.1安装问题及解决方法

    2月底的时候,webpack4正式发布了,但是当我们安装之后,使用下面的语句来打包的时候,发现打包失败了 webpack ./src/main.js ./dist/bundle.js 并且给出了下面这 ...

  8. Java--图片浏览器

    功能:启动后选择打开文件,可以打开图片进行浏览. v 1.0 :支持上一张 下一张功能.(欠缺,窗口大小未随着图片大小而改变) import java.awt.BorderLayout; import ...

  9. jieba文本分词,去除停用词,添加用户词

    import jieba from collections import Counter from wordcloud import WordCloud import matplotlib.pyplo ...

  10. 重构改善既有代码设计--重构手法10:Move Method (搬移函数)

    你的程序中,有个函数与其所驻类之外的另一个类进行更多的交流:调用后者,或被后者调用.在该函数最常用引用的类中建立一个有着类似行为的新函数.将旧函数编程一个单纯的委托函数,或是将旧函数完全移除. 动机: ...