Как выделить временную метку из этой строки? - PullRequest
1 голос
/ 21 июля 2010

У меня есть эта строка:

Каков наилучший («самый умный») способ сделать это?подстрока (), регулярное выражение?

Ответы [ 3 ]

4 голосов
/ 21 июля 2010
Pattern p = Pattern.compile("(\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3})");
//you could also use "d\\^(.*)Z" as your regex patern
Matcher m = p.matcher("your string here");

if (m.find()) {
    System.out.println(m.group(1)); //print out the timestamp
}

Взято из здесь

Кроме того, обязательно используйте объект Pattern p, если вы просматриваете последовательность строк

2 голосов
/ 21 июля 2010

С двумя небольшими допущениями вы можете сделать это без регулярных выражений.

  1. ^d перед строкой с датой является первым, который появляется в тексте. Я предполагаю, что разделитель всегда означает «Дата следует».
  2. Этот формат даты выглядит довольно регулярно, поэтому я предполагаю, что длина не изменится.

Просто получите индекс начального ^d разделителя, чтобы узнать, где начинается дата, и используйте длину, чтобы получить конечный индекс.

public static void main(String[] args) {
    String s1 = "A^1.1#B^1#I^2#f^0#p^1#d^2010-07-21T08:52:05.222ZKHBDGSLKHFBDSLKFGNIF#%$%^$#^$XLGCREWIGMEWCERG";
    String s2 = "A^1.1#B^1#f^0#p^1#d^2010-07-22T07:02:05.370ZREGHCOIMIYR$#^$#^$#^EWMGCOINNNNNNVVVRFGGYVJ667VTG";

    System.out.println( parseDate(s1) );
    System.out.println( parseDate(s2) );
}

public static String parseDate(String s) {
    int start = s.indexOf("d^") + 2;
    int length = 23;

    String date = s.substring(start, start + length);
    return date;
}

Выход:

2010-07-21T08: 52: 05,222
2010-07-22T07: 02: 05.370

0 голосов
/ 21 июля 2010

Я бы пошел с регулярным выражением, что-то вроде (\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d\.\d{3}).

Возможно, вы захотите стать более любопытным и запретить месяцы за пределами диапазона 01–12, дни за пределами 01–31 и т. Д. В течение нескольких часов, но это должно быть достаточно хорошо, учитывая данные, которые вы предоставили.

Подстроки могут работать, если перед датой всегда стоит префикс ^ d, но я все еще думаю, что регулярное выражение чище.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...