代码:
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

解决方案 »

  1.   

    public static void readFile2() {
    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();
    }
    }
      

  2.   

    while (br.read() != -1) {
    sb.append(br.readLine());
    }
    这里是有问题的。br.read()之后,游标已经向前移动了一个字符,你再readLine()之后就是这一行剩下的内容了。String temp;
    while((temp=br.readLine())!=null){
    sb.append(temp);
    }可以44这样
      

  3.   

    package Base;import java.io.*;
    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(); }}这样就解决了,楼主根据自己的需要用吧