Регулярное выражение для извлечения часа-минуты-секунды из строки

1

У меня есть следующая строка

STATUS | webapp | 2014/05/26 15:03:13 | Starting the service...

Теперь мне придется извлечь час и секунду с линии.

Я придумал этот код.

 BufferedReader bin = new BufferedReader(new FileReader(wrapperFile));
 s = bin.readLine();
 final Scanner sc = new Scanner(s);
 final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
 while (sc.hasNextLine()) {
        final String line = sc.nextLine();
        final Date date = dateFormat.parse(line);
        final Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        System.out.print(calendar.get(Calendar.HOUR));
        System.out.print(calendar.get(Calendar.MINUTE));
        System.out.print(calendar.get(Calendar.SECOND));
 }

Но исключение parser было брошено. Есть ли какое-либо обходное решение этой проблемы.??

Теги:
date
parsing
calendar

3 ответа

2
Лучший ответ

Полное решение здесь:

    String input = "STATUS | webapp | 2014/05/26 15:03:13 | Starting the service...";
    String[] splitted = input.split("\\s\\|\\s");
    String dateTime = splitted[2];
    Calendar c = Calendar.getInstance();
    try {
        Date d = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").parse(dateTime);
        c.setTime(d);
        System.out.println("Year: " + c.get(Calendar.YEAR));
        System.out.println("Month: " + c.get(Calendar.MONTH));
        System.out.println("Day in month: " + c.get(Calendar.DAY_OF_MONTH));
        System.out.println("Hour: " + c.get(Calendar.HOUR_OF_DAY));
        System.out.println("Minute: " + c.get(Calendar.MINUTE));
        System.out.println("Second: " + c.get(Calendar.SECOND));
    }
    catch (Throwable t) {
        // test
        t.printStackTrace();
    }

Вывод

Year: 2014
Month: 4 // 0-based!
Day in month: 26
Hour: 15
Minute: 3
Second: 13
2
([0-9]{2}:){2}[0-9]{2} 

будет соответствовать HH: MM: SS

  • 0
    Исправлено, делая его немного более многословным
1

Разделите String ввода с помощью | разделитель, затем используйте SimpleDateFormat с узором yyyy/MM/dd HH:mm:ss на 3- й элемент массива, возвращенный из split

Ещё вопросы

Сообщество Overcoder
Наверх
Меню