У меня есть строковая переменная, которая содержит текст вместе с некоторыми датами. Теперь я хотел бы получить дату из текста. Как я могу это сделать.
String a = "I am ready at time -S 2019-06-16:00:00:00 and be there"
Теперь я хотел бы получить 2019-06-16:00:00:00
оттуда. Формат даты всегда будет в одном и том же формате, но мне нужно получить дату только из текста.
Попробуйте использовать сопоставитель регулярных выражений с шаблоном:
\d{4}-\d{2}-\d{2}:\d{2}:\d{2}:\d{2}
Образец кода:
String a = "I am ready at time -S 2019-06-16:00:00:00 and be there";
String pattern = "\\d{4}-\\d{2}-\\d{2}:\\d{2}:\\d{2}:\\d{2}";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(a);
while (m.find()) {
System.out.println("found a timestamp: " + m.group(0));
}
Вы правы, я думал, что в вашем регулярном выражении есть скобки. Виноват.
Спасибо. Еще кое-что. Строка a = "Я готов вовремя -S 2019-06-16:00:00:00 и -n03 быть там" В этой строке мне нужно получить значение -n. Это -n может быть в любом месте текста, как и решение даты. ТАКЖЕ формат значения -n может быть -n15 -- Без пробела после -n -n 15 -- Пробел после -n Мой текст может начинаться с -n или -n может быть в середине или в конце. Пожалуйста, помогите с регулярное выражение для того же
One more thing
... пожалуйста, не меняйте свой вопрос после того, как другие уже ответили.
Я просто прошу еще одну дополнительную информацию только. На этот вопрос есть ответ.
Я бы предложил использовать для этого регулярные выражения, например:
private static final Pattern p = Pattern.compile("(\d{4}-\d{2}-\d{2}:\d{2}:\d{2}:\d{2})");
public static void main(String[] args) {
String a = "I am ready at time -S 2019-06-16:00:00:00 and be there"
// create matcher for pattern p and given string
Matcher m = p.matcher(a);
// if an occurrence if a pattern was found in the given string...
if (m.find()) {
// ...then you can use group() methods.
System.out.println(m.group(0));
}
}
Вам нужно указать, какой сопоставитель ему нужно использовать.
String str = "I am ready at time -S 2019-06-16:00:00:00 and be there";
Pattern pattern = Pattern.compile("(?<date>\\d{4}-\\d{2}-\\d{2}):(?<time>\\d{2}:\\d{2}:\\d{2})");
Matcher matcher = pattern.matcher(str);
if (matcher.matches()) {
System.out.println(matcher.group("date")); // 2019-06-16
System.out.println(matcher.group("time")); // 00:00:00
}
Используйте регулярное выражение для извлечения даты из текста.
public static void main(String[] args) {
String a = "I am ready at time -S 2019-06-16:00:00:00 and be there";
Pattern pattern = Pattern.compile("[0-9]{4}[-][0-9]{1,2}[-][0-9]{1,2}[:][0-9]{1,2}[:][0-9]{1,2}[:][0-9]{1,2}");
Matcher matcher = pattern.matcher(a);
while(matcher.find()){
System.out.println(matcher.group());
}
}
Этот текст может содержать и другие числовые значения. Фактическая строка будет выглядеть так: «Я готов вовремя -S 2019-06-16:00:00:00 и буду там -k 2 Heldlo -a02 Готово»; Теперь этот параметр может быть в разных местах текста и мне нужно исправить значение -d -k -a