代码:
public void readFile2(){
String regEx = "P\\d{11}";
String path = "E:\\aa.txt";
StringBuffer sb = new StringBuffer();
try {
FileInputStream fin = new FileInputStream(path);
BufferedReader br = new BufferedReader (new InputStreamReader(fin,"UTF-8"));
while (br.read() != -1){
sb.append(br.readLine());
}
Pattern pattern = Pattern.compile(regEx);
Matcher mat = pattern.matcher(sb.toString().trim());
System.out.println(sb.toString().trim());
System.out.println(mat.find());
System.out.println(mat.groupCount());
if(mat.find()){
for(int i =1;i<mat.groupCount();i++){
System.out.println(mat.group(i));
}
}
} catch (Exception e) {
e.printStackTrace();
}
}我想得到aa.txt 文件中 的所有以P开头 后接11位数字的字符串 ,类似于“P12345678901”
然后把它们打印在控制台,现在我在执行的时候控制台没有内容输入,也就是没有匹配到 ,没找到原因 ,请大家帮忙看看!aa.txt的内容是:
+---------------------------------------------------------------------------+当前的系统时间为 08-12-2010 16:47:13+---------------------------------------------------------------------------+**Starts**08-12-2010 16:47:13
**Ends**08-12-2010 16:53:33
+---------------------------------------------------------------------------+
v_segments : 3522.655146.P35221012003.M03020104.PL02050303010102.Q0200.P0100000.N01.C010100 ---- 2010-12-08 16:08:54
失败: 值集 P35221012003SET 中不存在弹性域段 BDGT_PROJECT 的值 P35221012003. (VALUESET=CGL_BDGT_PROJECT) ---- 2010-12-08 16:08:54
v_segments : 3522.655146.P35221012003.M030301.PL0205030307.Q0300.P0100000.N01.C010100 ---- 2010-12-08 16:08:54
失败: 值集 P35221012003SET 中不存在弹性域段 BDGT_PROJECT 的值 P35221012003. (VALUESET=CGL_BDGT_PROJECT) ---- 2010-12-08 16:08:54
v_segments : 3522.655146.P35221012003.M030401.PL0205030399.Q0100.P0100000.N01.C020100 ---- 2010-12-08 16:08:54
失败: 值集 P35221012003SET 中不存在弹性域段 BDGT_PROJECT 的值 P35221012003. (VALUESET=CGL_BDGT_PROJECT) ---- 2010-12-08 16:08:54
v_segments : 3522.655146.P35221012003.M100105.PL020599990102.Q0200.P0100000.N01.C020100 ---- 2010-12-08 16:08:54
失败: 值集 P35221012003SET 中不存在弹性域段 BDGT_PROJECT 的值 P35221012003. (VALUESET=CGL_BDGT_PROJECT) ---- 2010-12-08 16:08:54
v_segments : 3522.654290.P35221012038.M03020101.PL02050303010101.... ---- 2010-12-08 16:08:56
失败: 值 P35221012038 已过期。 ---- 2010-12-08 16:08:56
v_segments : 3522.654290.P35221012038.M03020105.PL02050303010201.... ---- 2010-12-08 16:08:56
失败: 值 P35221012038 已过期。 ---- 2010-12-08 16:08:56
v_segments : 3522.654290.P35221012038.M030402.PL0205030399.... ---- 2010-12-08 16:08:56
失败: 值 P35221012038 已过期。 ---- 2010-12-08 16:08:56
v_segments : 3521.454282.P35211008078.M04010101.PL0205990802.Q0500... ---- 2010-12-08 16:09:00
失败: 值 P35211008078 已过期。 ---- 2010-12-08 16:09:00
v_segments : 3530.754140.P35301011159.M030301.PL0205030307.... ---- 2010-12-08 16:09:39
失败: 值 P35301011159 已过期。 ---- 2010-12-08 16:09:39
v_segments : 3530.754140.P35301011159.M100106.PL020599990102.... ---- 2010-12-08 16:09:39
失败: 值 P35301011159 已过期。 ---- 2010-12-08 16:09:39
v_segments : 3524.2522005.P35241009074.M090304.PL02050199.... ---- 2010-12-08 16:10:00
失败: 值 P35241009074 已过期。 ---- 2010-12-08 16:10:00
public void readFile2(){
String regEx = "P\\d{11}";
String path = "E:\\aa.txt";
StringBuffer sb = new StringBuffer();
try {
FileInputStream fin = new FileInputStream(path);
BufferedReader br = new BufferedReader (new InputStreamReader(fin,"UTF-8"));
while (br.read() != -1){
sb.append(br.readLine());
}
Pattern pattern = Pattern.compile(regEx);
Matcher mat = pattern.matcher(sb.toString().trim());
System.out.println(sb.toString().trim());
System.out.println(mat.find());
System.out.println(mat.groupCount());
if(mat.find()){
for(int i =1;i<mat.groupCount();i++){
System.out.println(mat.group(i));
}
}
} catch (Exception e) {
e.printStackTrace();
}
}我想得到aa.txt 文件中 的所有以P开头 后接11位数字的字符串 ,类似于“P12345678901”
然后把它们打印在控制台,现在我在执行的时候控制台没有内容输入,也就是没有匹配到 ,没找到原因 ,请大家帮忙看看!aa.txt的内容是:
+---------------------------------------------------------------------------+当前的系统时间为 08-12-2010 16:47:13+---------------------------------------------------------------------------+**Starts**08-12-2010 16:47:13
**Ends**08-12-2010 16:53:33
+---------------------------------------------------------------------------+
v_segments : 3522.655146.P35221012003.M03020104.PL02050303010102.Q0200.P0100000.N01.C010100 ---- 2010-12-08 16:08:54
失败: 值集 P35221012003SET 中不存在弹性域段 BDGT_PROJECT 的值 P35221012003. (VALUESET=CGL_BDGT_PROJECT) ---- 2010-12-08 16:08:54
v_segments : 3522.655146.P35221012003.M030301.PL0205030307.Q0300.P0100000.N01.C010100 ---- 2010-12-08 16:08:54
失败: 值集 P35221012003SET 中不存在弹性域段 BDGT_PROJECT 的值 P35221012003. (VALUESET=CGL_BDGT_PROJECT) ---- 2010-12-08 16:08:54
v_segments : 3522.655146.P35221012003.M030401.PL0205030399.Q0100.P0100000.N01.C020100 ---- 2010-12-08 16:08:54
失败: 值集 P35221012003SET 中不存在弹性域段 BDGT_PROJECT 的值 P35221012003. (VALUESET=CGL_BDGT_PROJECT) ---- 2010-12-08 16:08:54
v_segments : 3522.655146.P35221012003.M100105.PL020599990102.Q0200.P0100000.N01.C020100 ---- 2010-12-08 16:08:54
失败: 值集 P35221012003SET 中不存在弹性域段 BDGT_PROJECT 的值 P35221012003. (VALUESET=CGL_BDGT_PROJECT) ---- 2010-12-08 16:08:54
v_segments : 3522.654290.P35221012038.M03020101.PL02050303010101.... ---- 2010-12-08 16:08:56
失败: 值 P35221012038 已过期。 ---- 2010-12-08 16:08:56
v_segments : 3522.654290.P35221012038.M03020105.PL02050303010201.... ---- 2010-12-08 16:08:56
失败: 值 P35221012038 已过期。 ---- 2010-12-08 16:08:56
v_segments : 3522.654290.P35221012038.M030402.PL0205030399.... ---- 2010-12-08 16:08:56
失败: 值 P35221012038 已过期。 ---- 2010-12-08 16:08:56
v_segments : 3521.454282.P35211008078.M04010101.PL0205990802.Q0500... ---- 2010-12-08 16:09:00
失败: 值 P35211008078 已过期。 ---- 2010-12-08 16:09:00
v_segments : 3530.754140.P35301011159.M030301.PL0205030307.... ---- 2010-12-08 16:09:39
失败: 值 P35301011159 已过期。 ---- 2010-12-08 16:09:39
v_segments : 3530.754140.P35301011159.M100106.PL020599990102.... ---- 2010-12-08 16:09:39
失败: 值 P35301011159 已过期。 ---- 2010-12-08 16:09:39
v_segments : 3524.2522005.P35241009074.M090304.PL02050199.... ---- 2010-12-08 16:10:00
失败: 值 P35241009074 已过期。 ---- 2010-12-08 16:10:00
String regEx = "(P\\d{11})";
String path = "C:\\aa.txt";
StringBuffer sb = new StringBuffer();
try {
FileInputStream fin = new FileInputStream(path);
BufferedReader br = new BufferedReader(new InputStreamReader(fin,
"UTF-8"));
while (br.read() != -1) {
sb.append(br.readLine());
}
Pattern pattern = Pattern.compile(regEx);
Matcher mat = pattern.matcher(sb.toString().trim());
while(mat.find()){
System.out.println(mat.group(1));
}
} catch (Exception e) {
e.printStackTrace();
}
}
sb.append(br.readLine());
}
这里是有问题的。br.read()之后,游标已经向前移动了一个字符,你再readLine()之后就是这一行剩下的内容了。String temp;
while((temp=br.readLine())!=null){
sb.append(temp);
}可以44这样
import java.util.regex.*;public class TestRex {
private void parse (String line) {
String regEx = "P\\d{11}";
Pattern pattern = Pattern.compile(regEx);
Matcher mat = pattern.matcher(line.trim());
while(mat.find()){
System.out.println(mat.group());
}
}
public void readFile2() {
String path = "G:\\aa.txt";
//StringBuffer sb = new StringBuffer();
String line = "";
try {
FileInputStream fin = new FileInputStream(path);
BufferedReader br = new BufferedReader(new InputStreamReader(fin,
"UTF-8"));
while ((line = br.readLine()) != null) {
parse(line);
}
// System.out.println(sb.toString().trim());
// System.out.println(mat.find());
// System.out.println(mat.groupCount());
} catch (Exception e) {
e.printStackTrace();
}
} public static void main(String[] args) {
new TestRex().readFile2(); }}这样就解决了,楼主根据自己的需要用吧