Java学习笔记(九)--Calendar类 正则表达式

时间:2023-02-26 13:08:55

Calendar类

1.Calendar(日历类):获取年,获取月,获取日,获取时,获取分,获取秒。
2.public int get(int field):返回给定日历字段的值。
3.调用 Calendar 类的 getInstance() 方法获取一个实例,然后通过调用 get() 方法获取日期时间信息,参数为需要获得的字段的值, Calendar.Year 等为 Calendar 类中定义的静态常量。

Calendar c = Calendar.getInstance();//获取Calendar对象
int year=c.get(Calendar.YEAR);//获取年
int month=c.get(Calendar.MONTH)+1;//获取月份,0表示1月份
int day=c.get(Calendar.DAY_OF_MONTH);//获取日
int hour=c.get(Calendar.HOUR_OF_DAY);//获取时
int minute=c.get(Calendar.MINUTE);//获取分
int second=c.get(Calendar.SECOND);//获取秒

4.Calendar类提供了getTime()方法,来获取Date对象,完成Calendar和Date的转换。

Date date=c.getTime();

5.getTimeInMillis():获取当前Clendar的毫秒值。

long time=c.getTimeInMillis();

6.puublic void add(int field,int amount):根据amount修改filed的值。
public void set(int year,int month,int date):设置当前日历的年月日。

需求:键盘录入年份,获取任意一年的二月有多少天。

package com.edu.calendar;

import java.util.Calendar;
import java.util.Scanner;

public class CalendarTest {
public static void main(String[] args) {
/**
* 1.获取年份
* 2.将日历对象的时间调到,此年的3月的第一天
* 3.将日期对象向前推一天
* 4.获取此天的日期
*/

System.out.println("请输入年份");

Scanner sc = new Scanner(System.in);
int year = sc.nextInt();

// 2.将日历对象的时间调到,此年的3月的第一天
Calendar c = Calendar.getInstance();
c.set(year, 2, 1);

//3.将日期对象向前推一天
c.add(Calendar.DATE, -1);

//4.获取此天的日期
System.out.println("该年的二月有"+c.get(Calendar.DATE));

}

}

正则表达式

1.正则表达式是由普通字符(如英文字母)以及特殊字符(也称为元字符)组成的文字模式。该模式对文本查找时需要匹配的一个或多个字符串描述,给出一个匹配模板。
2.英文句点符号:匹配单个任意字符。
eg:
表达式”t。o 可以匹配:tno,t#o,teo等等。不可以匹配:tnno,to,Tno,t正o等。
3.方括号:只有方括号里面指定的字符才参与匹配,也只能匹配单个字符。
eg:
表达式:t[abcd]n 只可以匹配:tan,tbn,tcn,tdn。不可以匹配:thn,tabn,tn等。
4. | 符号。相当与“或”,可以匹配指定的字符,但是也只能选择其中一项进行匹配。
eg:
表达式:t(a|b|c|dd)n 只可以匹配:tan,tbn,tcn,tddn。不可以匹配taan,tn,tabcn
5.表示匹配次数的符号:
*:0次或多次
+:1次或多次
?:0次或1次
{n}:恰好n次
{n,m}:从n到m次
{n,}:至少n次
eg:
表达式:[0—9]{ 3 } \— [0-9]{ 2 } \— [0-9]{ 3 } 的匹配格式为:999—99—999
因为“—”符号在正则表达式中有特殊的含义,它表示一个范围,所以在前面加转义字符“\”。
6.^符号:表示否
^符号被称为“否”符号,如果用在方括号内,“^“表示不想匹配的字符。
eg:
表达式:[^x] 第一个字符不能是x
7.圆括号,和空白符号
“\s”是空白符号,只可以匹配一个空格、制表符、回车符、换页符,不可以匹配自己输入的多个空格。
()是分组号,可以用ORO API提取处出值,后面将详细讨论。
8.正则表达式的一些快捷符号:
\d表示[0—9], \D表示[^0—9], \w表示[0—9A—Z_a—z],
\W表示[^0—9A—Z_a—z], \s表示[\t\n\r\f], \S表示[^\t\n\r\f]
9.一些常用的正则表达式:
Java:
(([a-z]|_)(\w*)){6,20}匹配以字母或下划线开头,字母数字下划线结尾的字符串。

JavaScript:
/^(-?)(\d+) //\w+ /匹配字母数字下划线。
.+ 一个或多个字符。
/0 第一次匹配的字符串。
10. java类中使用正则表达式:
eg1:
Pattern p = Pattern.compile(“t.n”);
Matcher m = p.matcher(“ton”);
if(m.matches()){
return true;
}
eg2:boolean bool=Pattern.matches (“t.n”,”ton”);
如果一个正则表达式要重复利用,用第一种,如果只匹配一次,第二种是最佳选择。
11.反斜线字符(‘\’)用于转义字符,同时还可以引用非转义字符(不包括非转义字母)
因此‘\’表示‘\’,‘{’表示{。 但是‘\y’就是错的,因为在不表示转义构造的 任何字母字符前 使用反斜线都是错误的。
12.判断功能:
public boolean matches(String regex):告知此字符串是否匹配给定的正则表达式。
需求:找出规则,写出正则(1[38][0-9]{9}),校验电话号码。

public class RegexDemo {
public static void main(String[] args) {
/*13245678901 13332345678 13456789012 18812345678 18999999999
18666666666 18786868686
*/

String number = "13245678901";
//正则表达式
String reg = "1[38][0-9]{9}";
//调用maches(String reg)进行判断指定字符串是否匹配指定的正则表达式
boolean flag = number.matches(reg);
System.out.println(flag);
}

}

13.分割功能:
public String[] split(String regex):根据给定正则表达式的匹配拆分此字符串。
需求:分割如下字符串:String s = “D:\baidu\20160826\day14”;

public class RegexDemo {
public static void main(String[] args) {
//String s = "D:\\baidu\\20160826\\day14";
String s = "D:\\baidu\\20160826\\day14";
String reg = "\\\\";
String[] strs = s5.split(reg);
for (int i = 0; i < strs.length; i++) {
System.out.println(strs[i]);
}
}

}

14.替换功能:
public String replaceAll(String regex,String replacement):把符合regex的用replacement替换。
需求:字符串中的数字使用*代替。

public class RegexDemo6 {
public static void main(String[] args) {
String s = "我的银行卡号是:6102344354565";
String reg = "[0-9]";
String newStr = s.replaceAll(reg, "*");
System.out.println(newStr);
}

}