边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界
\B 非单词边界
\A 输入的开头
\G 上一个匹配的结尾
\Z 输入的结尾,仅用于最后的结束符(如果有的话)
一个代码统计小工具
^ 行的开头
$ 行的结尾
\b 单词边界
\B 非单词边界
\A 输入的开头
\G 上一个匹配的结尾
\Z 输入的结尾,仅用于最后的结束符(如果有的话)
\z 输入的结尾
Matcher 类
常用方法:
find()尝试查找与该模式匹配的输入序列的下一个子序列。
group()返回由以前匹配操作所匹配的输入子序列。
lookingAt()尝试将从区域开头开始的输入序列与该模式匹配。
正则表达式分组
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Text {
public static void p(Object o){
System.out.println(o);
}
public static void main(String[] args){
Pattern p = Pattern.compile("(\\d{3,5})([a-z]{2})"); //正则表达式分成两组,分别用()分开
Matcher m = p.matcher("123as-2341aw-23456ad-00");
while(m.find()){
p(m.group(1)); //打印出组号为1的内容
}
}
}
一个代码统计小工具
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class CodeCounter {
static long normalLines = 0;
static long commentLines = 0;
static long whiteLines = 0;
public static void main(String[] args) {
File f = new File("G:\\rubbish\\listview\\src");
jisuan(f);
System.out.println("normalLines:" + normalLines);
System.out.println("commentLines:" + commentLines);
System.out.println("whiteLines:" + whiteLines);
}
private static void jisuan(File f){
if(f.exists()){
if(f.isFile()){
if(f.getName().matches(".*\\.java{1}quot;)) {
parse(f);
}
} else {
File[] t = f.listFiles();
for(File x : t){
jisuan(x);
}
}
} else {
System.out.println("error");
}
}
private static void parse(File f) {
BufferedReader br = null;
boolean comment = false;
try {
br = new BufferedReader(new FileReader(f));
String line = "";
while((line = br.readLine()) != null) {
line = line.trim();
if(line.matches("^[\\s&&[^\\n]]*{1}quot;)) {
whiteLines ++;
} else if (line.startsWith("/*") && !line.endsWith("*/")) {
commentLines ++;
comment = true;
} else if (line.startsWith("/*") && line.endsWith("*/")) {
commentLines ++;
} else if (true == comment) {
commentLines ++;
if(line.endsWith("*/")) {
comment = false;
}
} else if (line.startsWith("//")) {
commentLines ++;
} else {
normalLines ++;
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if(br != null) {
try {
br.close();
br = null;
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}