2016-01-11 3 views
0

У меня есть нижнее строковое значение в моем классе java.как разбить String на формат даты

Nazar 1:46 PM Hello, I have few questions related to API Management 1:46 PM Sadhana has joined

Я хочу, чтобы разбить его на основе времени, указанного в нем. Он должен показывать вывод таким образом, что всякий раз, когда приходит значение времени, он создает новый разрыв строки. Как показано ниже:

Nazar 1:46 PM Hello, I have few questions related to API Management. 1:46 PM Sadhana has joined

Как я могу сделать это.

+2

взглянуть на расщепленной функции и регулярное выражение java.langString в. (Google: java regex) – TungstenX

+0

Попробуйте ['(? I) \ s + (? = \ B \ d {1,2}: \ d {1,2} \ s * [AP] M)'] (https://regex101.com/r/mL6tJ2/2). См. [Java demo] (https://ideone.com/dsMfbn) –

ответ

2

Вы также можете использовать это регулярное выражение.

(?=\b(((11|12|10|(0[1-9]{1})):)|[\d]:)[0-5][0-9](\s)?(?i)(am|pm)) 

! Описание:

Он должен соответствовать hh:mm AM/PM, а также h:mm AM/PM.

hh -> hours 01-09 or 10,11,12 or 1-9 
mm -> minutes 00-59 
AM/PM -> case insensitive 

Использование:

String text = "Nazar 11:46 PM Hello, I have few questions related to API Management 10:46 PM " 
      + "Sadhana has joined 06:35 AM its early 6:50 PM and late"; 

    String texts[] = text.split("(?=\\b(((11|12|10|(0[1-9]{1})):)|[\\d]:)[0-5][0-9](\\s)?(?i)(am|pm))"); 

    for(String s : texts){ 
     System.out.println(s); 
    } 

Выход:

Nazar 
11:46 PM Hello, I have few questions related to API Management 
10:46 PM Sadhana has joined 
06:35 AM its early 
6:50 PM and late 
+0

Это не точка с запятой, это двоеточие. –

+0

не может разделиться, когда я меняю время на 11:46 и 10:46. – JPG

+0

@JSK Я обновил свой ответ. Надеюсь, это уловит ваши потребности. – Patrick

1

Вы можете попробовать что-то вроде этого:

str.split("(?=\\d{1,2}:\\d{1,2} (AM|PM))"); 
+0

, неспособный разделить, когда я меняю время на 11:46 и 10:46. – JPG

1

Вы можете использовать это регулярное выражение для разделения:

String[] arr = str.split("(?=(?<!\\d:)\b\\d{1,2}:\\d{1,2}(?::\\d{1,2})? [AP]M\b)\\s*"); 

Важно использовать границы слов\b по обе стороны от опережения шаблона:

RegEx Demo

+0

Спасибо, анубхава. Ваш код работал для меня. Но сейчас возникает еще одна проблема. Проблема заключается в том, что входная строка может содержать два временных формата одновременно. т.е. 13:46 PM (2:49:02 PM). Как я могу разделить эту конкретную строку, которая содержит оба эти временных формата, по очереди. Вам необходимо руководствоваться. – JPG

+0

ok проверить обновленный ответ – anubhava

0

Это регулярное выражение должно создать желаемый результат.

String s = "Nazar 1:46 PM Hello, I have few questions related to API Management 10:46 PM Sadhana has joined"; 
String s1[] = s.split("(\\s)(?=([01]?\\d:[0-6]?\\d\\s?([Aa]|[Pp])[Mm]))"); 
for (String s2 : s1) { 
    System.out.println(s2); 
} 
Смежные вопросы