从文本文件中剥离数据

时间:2011-09-14 16:17:33

标签: java regex fileinputstream datainputstream

我首先要发布文本文件中的日期,这只是4行,实际文件是几百行。

2011年9月9日星期五
-STV 101 -------- 05:00 - 23:59 SSB 4185报告于9/08/2011于2:37打印

0-AH 104 -------- 07:00 - 23:00 AH GYM报告于2011年9月9日2:37印刷

-BG 105 -------- 07:00 - 23:00 SH GREAT HALL报告于9/08/2011于2:37印刷

我想对这个文本文件做的是忽略第一行及其上的日期,然后忽略下一行的' - ',但读入“STV 101”,“5:00”和“ 23:59“将它们保存到变量中,然后忽略该行上的所有其他字符,然后对每行进行依此类推。

以下是我目前正在阅读的内容。然后,只要用户将路径放在scheduleTxt JTextfield中,我就调用此函数。它可以很好地读取和打印每一行。

public void readFile () throws IOException
{
    try
    {
        FileInputStream fstream = new FileInputStream(scheduleTxt.getText());
        DataInputStream in = new DataInputStream(fstream);
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        String strLine;

        while ((strLine = br.readLine()) != null)   
        {
            System.out.println (strLine);
        }
        in.close();
    }
    catch (Exception e){//Catch exception if any
        System.err.println("Error: " + e.getMessage());
    }
}

更新:事实证明我还需要将星期五排除在顶线之外,并将其放入变量中 谢谢!牛肉。

1 个答案:

答案 0 :(得分:3)

没有彻底测试,但是这个正则表达式将捕获第2组,第5组和第7组中所需的信息:(假设你只对“0-AH 104”的例子中的“AH 104”感兴趣 - “)         ^(\S)*-(([^-])*)(-)+((\S)+)\s-\s((\S)+)\s(.)*

    String regex = "^(\\S)*-(([^-])*)(-)+((\\S)+)\\s-\\s((\\S)+)\\s(.)*";
    Pattern pattern = Pattern.compile(regex);
    while ((strLine = br.readLine()) != null){
        Matcher matcher = pattern.matcher(strLine);
        boolean matchFound = matcher.find();
        if (matchFound){
            String s1 = matcher.group(2);
            String s2 = matcher.group(5);
            String s3 = matcher.group(7);
            System.out.println (s1 + " " + s2 + " " + s3);
        }

    }

可以使用非捕获组调整表达式,以便仅捕获所需的信息。

正则表达式元素的说明:

  1. ^(\S)*-匹配以-结尾的非空白字符组。 注意:可能是^(.)*-,如果在第一个-之前有空格,则无效。
  2. (([^-])*)匹配除-以外的每个字符的组。
  3. (-)+匹配一个或多个-的组。
  4. ((\S)+)匹配一个或多个非空白字符的组。这是在第5组中捕获的。
  5. \s-\s匹配空格组,后跟-,后跟空格。
  6. '((\ S)+)'与4.相同。这是在第7组中捕获的。
  7. \s(.)*匹配空白,后跟任何内容,将跳过。
  8. 有关正则表达式的更多信息,请参阅此tutorial。 周围还有一些有用的cheatsheets。在设计/调试表达式时,regexp testing tool也可以证明非常有用。