java-⽇期时间及正则表达式
⽇期时间
java.util包提供了Date类来封装当前的⽇期和时间。 Date类提供两个构造函数来实例化Date对象。
第⼀个构造函数使⽤当前⽇期和时间来初始化对象。
Date( )
第⼆个构造函数接收⼀个参数,该参数是从1970年1⽉1⽇起的微秒数。
Date(long millisec)
实例:
Date d = new Date();
System.out.String());
//Fri May 22 09:17:12 CST 2015
创建test类,创建Date对象,打印当前时间
格式化⽇期
SimpleDateFormat是⼀个以语⾔环境敏感的⽅式来格式化和分析⽇期的类。SimpleDateFormat允许你选择任何⽤户⾃定义⽇期时间格式来运⾏
实例:
Date dNow = new Date( );
SimpleDateFormat ft =
new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss");
System.out.println("Current Date: " + ft.format(dNow));
//Current Date: 2015-05-22 09:29:48
printf⽅法可以很轻松地格式化时间和⽇期。使⽤两个字母格式,它以t开头并且以下⾯表格中的⼀个字母结尾.
// 初始化 Date 对象
Date date = new Date();
// 使⽤toString()显⽰⽇期和时间
String str = String.format("Current Date/Time : %tc", date );
System.out.printf(str);
printf:⽇期和时间转换字符
字符描述
c    完整的⽇期和时间
F    ISO 8601 格式⽇期
D    U.S. 格式⽇期 (⽉/⽇/年)
T    24⼩时时间
r    12⼩时时间
R    24⼩时时间,不包含秒
Y    4位年份(包含前导0)
y    年份后2位(包含前导0)
C    年份前2位(包含前导0)
B    ⽉份全称
b    ⽉份简称
n    2位⽉份(包含前导0)
d    2位⽇⼦(包含前导0)
e    2位⽇⼦(不包含前导0)
A    星期全称
a    星期简称
j    3位年份(包含前导0)
H    2位⼩时(包含前导0), 00 到 23
k    2位⼩时(不包含前导0),  0 到 23
I    2位⼩时(包含前导0), 01 到 12
l    2位⼩时(不包含前导0),  1 到 12
M    2位分钟(包含前导0)
S    2位秒数(包含前导0)
L    3位毫秒(包含前导0)
N    9位纳秒(包含前导0)
P    ⼤写上下午标志
p    ⼩写上下午标志
z    从GMT的RFC 822数字偏移
Z    时区
s    ⾃ 1970-01-01 00:00:00 GMT的秒数
Q    ⾃ 1970-01-01 00:00:00 GMT的毫妙
正则表达式概念
正则表达式定义了字符串的模式。
正则表达式可以⽤来搜索、编辑或处理⽂本。
正则表达式并不仅限于某⼀种语⾔,但是在每种语⾔中有细微的差别。
Java正则表达式和Perl的是最为相似的。
包主要包括以下三个类:
Pattern类:
pattern对象是⼀个正则表达式的编译表⽰。Pattern类没有公共构造⽅法。要创建⼀个Pattern对象,你必须⾸先调⽤其公共静态编译⽅法,它返回⼀个Pattern对象。该⽅法接受⼀个正则表达式作为它的第⼀个参数。Matcher类:
Matcher对象是对输⼊字符串进⾏解释和匹配操作的引擎。与Pattern类⼀样,Matcher也没有公共构造⽅法。你需要调⽤Pattern对象的matcher⽅法来获得⼀个Matcher对象。
PatternSyntaxException:
PatternSyntaxException是⼀个⾮强制异常类,它表⽰⼀个正则表达式模式中的语法错误。
java时间日期格式转换
捕获组
捕获组是把多个字符当⼀个单独单元进⾏处理的⽅法,它通过对括号内的字符分组来创建。
例如,正则表达式(dog) 创建了单⼀分组,组⾥包含"d","o",和"g"。
捕获组是通过从左⾄右计算其开括号来编号。例如,在表达式((A)(B(C))),有四个这样的组:
((A)(B(C)))
(A)
(B(C))
(C)
可以通过调⽤matcher对象的groupCount⽅法来查看表达式有多少个分组。groupCount⽅法返回⼀个int值,表⽰matcher对象当前有多个捕获组。还有⼀个特殊的组(组0),它总是代表整个表达式。该组不包括在groupCount的返回值中。
实例:
// 按指定模式在字符串查
String line = "This order was placed for QT3000! OK?";
String pattern = "(.*)(\\d+)(.*)";
// 创建 Pattern 对象
Pattern r = Patternpile(pattern);
// 现在创建 matcher 对象
Matcher m = r.matcher(line);
if (m.find( )) {
System.out.println("Found value: " + m.group(0) );
System.out.println("Found value: " + m.group(1) );
System.out.println("Found value: " + m.group(2) );
} else {
System.out.println("NO MATCH");
}
//Found value: This order was placed for QT3000! OK?
/
/Found value: This order was placed for QT300
//Found value: 0
//上述代码表⽰:0下标表⽰整串字符串,1下标表⽰最后⼀个数字0之前的字符串,2位表⽰最后⼀个数字,3位表⽰最后
//⼀个数字之后的字符串
匹配规则
/    将下⼀字符标记为特殊字符、⽂本、反向引⽤或⼋进制转义符。
^    匹配输⼊字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性,^ 还会与"\n"或"\r"之后的位置匹配。
$    匹配输⼊字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与"\n"或"\r"之前的位置匹配。
\S    匹配任何⾮空⽩字符。与 [^ \f\n\r\t\v] 等效。
+    ⼀次或多次匹配前⾯的字符或⼦表达式。例如,"zo+"与"zo"和"zoo"匹配,但与"z"不匹配。+ 等效于 {1,}。
零次或⼀次匹配前⾯的字符或⼦表达式。例如,"do(es)?"匹配"do"或"does"中的"do"。? 等效于 {0,1}。
x|y    匹配 x 或 y。例如,'z|food' 匹配"z"或"food"。'(z|f)ood' 匹配"zood"或"food"。
[xyz]    字符集。匹配包含的任⼀字符。例如,"[abc]"匹配"plain"中的"a"。
[^xyz]    反向字符集。匹配未包含的任何字符。例如,"[^abc]"匹配"plain"中"p","l","i","n"。
[a-z]    字符范围。匹配指定范围内的任何字符。例如,"[a-z]"匹配"a"到"z"范围内的任何⼩写字母。
[^a-z]    反向范围字符。匹配不在指定的范围内的任何字符。例如,"[^a-z]"匹配任何不在"a"到"z"范围内的任何字符。
\b    匹配⼀个字边界,即字与空格间的位置。例如,"er\b"匹配"never"中的"er",但不匹配"verb"中的"er"。
\d    数字字符匹配。等效于 [0-9]。
\D    ⾮数字字符匹配。等效于 [^0-9]。
\n    换⾏符匹配。等效于 \x0a 和 \cJ。
\r    匹配⼀个回车符。等效于 \x0d 和 \cM。
\w    匹配任何字类字符,包括下划线。与"[A-Za-z0-9_]"等效。
更多匹配规则,请查阅Java 正则表达式相关⽂档。
Mather类的⽅法
1 public int start() 返回以前匹配的初始索引。
2 public int start(int group) 返回在以前的匹配操作期间,由给定组所捕获的⼦序列的初始索引
3 public int end() 返回最后匹配字符之后的偏移量
4 public int end(int group) 返回在以前的匹配操作期间,由给定组所捕获⼦序列的最后字符之后的偏移量。
实例:对单词"cat"出现在输⼊字符串中出现次数进⾏计数的例⼦
private static final String REGEX = "\bcat\b";
private static final String INPUT ="cat cat cat cattie cat";
public static void main( String args[] ){
Pattern p = Patternpile(REGEX);
Matcher m = p.matcher(INPUT); // 获取 matcher 对象
int count = 0;
while(m.find()) {
count++;
System.out.println("Match number "+count);
System.out.println("start(): "+m.start());
System.out.println("end(): "+m.end());
}
}
replaceFirst 和replaceAll ⽅法
replaceFirst 和replaceAll ⽅法⽤来替换匹配正则表达式的⽂本。不同的是,replaceFirst 替换⾸次匹配,replaceAll 替换所有匹配。
实例:
private static String REGEX = "dog";
private static String INPUT = "The dog says meow. " +
"All dogs say meow.";
private static String REPLACE = "cat";
public static void main(String[] args) {
Pattern p = Patternpile(REGEX);
// get a matcher object
Matcher m = p.matcher(INPUT);
INPUT = m.replaceAll(REPLACE);
System.out.println(INPUT);
}
//The cat says meow. All cats say meow.
appendReplacement 和 appendTail ⽅法
Matcher 类也提供了appendReplacement 和appendTail ⽅法⽤于⽂本替换:
看下⾯的例⼦来解释这个功能:
private static String REGEX = "a*b";
private static String INPUT = "aabfooaabfooabfoob"; private static String REPLACE = "-";
public static void main(String[] args) {
Pattern p = Patternpile(REGEX);
// 获取 matcher 对象
Matcher m = p.matcher(INPUT);
StringBuffer sb = new StringBuffer();
while(m.find()){
m.appendReplacement(sb,REPLACE);
}
m.appendTail(sb);
System.out.String());
}
/
/-foo-foo-foo-

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。