阅读文本并打印出其中的日期

时间:2013-10-22 08:52:29

标签: java string date calendar

我有一个包含此内容的文本文件

08:00 - 09:30
09:45 - 11:15
11:30 - 13:00
08/04/13
14:00 - 15:30
15:45 - 17:15
17:30 - 19:00 








MIS (CH27) UM
MIS (CH27) UM

每个空行对应一周中的一天,08/04/14是一周的第一天。 我想阅读文本文件,计算MIS发生的日期并打印出来。 这是我的程序,它只显示结果中的任何内容。

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class UsingPattern {

public static final String SOURCE = "results/timetable1.txt";

/**
 * @param args
 * @throws ParseException 
 */
public static void main(String[] args) throws ParseException {      
    new UsingPattern().readFile(SOURCE);        
}
public void readFile(String filename) throws ParseException {       
    try {
        File file = new File(filename);
        FileReader reader = new FileReader(file);
        BufferedReader in = new BufferedReader(reader);
        String line;
        Calendar cal = new GregorianCalendar();                                 // Create a Calendar object
        while ((line = in.readLine()) != null) {                                // Read lines, check for end-of-file
            SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yy");     // Create a format for date input from text file                    
            Date date = null;
            if (line.matches("\\d{2}/\\d{2}/\\d{2}")) {                         // If the line has this format, put it as date
                date = dateFormat.parse(line);                                  
                cal.setTime(date);                                              // Sets this Calendar's time with the given Date.               
            }
            else {                                                              // Each empty line correspond to 1 day
                if ((in.readLine()) == " ") {                               
                    cal.add(Calendar.DAY_OF_MONTH, 1);                      
                }
                else {
                    if (line.matches("MIS")) {
                        String fday = dateFormat.format(cal.getTime()); 
                        System.out.println((fday)); 
                        System.out.println(line);
                    }   
                }                   
            }               
        }
        in.close();
    }       
    catch (IOException e) {
        e.printStackTrace();
    }

}

}

有人能指出我哪里做错了!  谢谢你!

1 个答案:

答案 0 :(得分:1)

我发现代码中至少有三个错误:

  1. 您正在循环中读取输入阅读器的下一行
  2. 在java中按值进行字符串比较时,您必须使用equals而不是==
  3. 如果您想匹配“MIS blablabla”之类的行,您应该使用line.matches("MIS.*")或更好line.startsWith("MIS")