Я пытаюсь проверить на String, если она имеет форму dd-mm-yyyy. Любая помощь, пожалуйста?Как проверить, имеет ли строка форму dd-mm-yy
Извините, я просто новичок.
Я пытаюсь проверить на String, если она имеет форму dd-mm-yyyy. Любая помощь, пожалуйста?Как проверить, имеет ли строка форму dd-mm-yy
Извините, я просто новичок.
if(myString.matches("\\d{2}-\\d{2}-\\d{4}")){
//Do something
}
В двойном обратных косых используются как один используются для компилятора, чтобы истолковать вторые в буквальном смысле, а в буквальном смысле один, как часть строки используются, чтобы сделать последовательность \d
ускользания цифры.
String test = "13-04-1999";
try {
SimpleDateFormat sdf = new SimpleDateFormat("dd-mm-yyyy");
sdf.setLenient(false);
sdf.parse(test);
} catch(ParseException ex) {
//string is not valid Date in your format
}
Вместо того, чтобы просто проверить dd-mm-yyyy
, что позволило бы входы как 99-99-9999
, вы могли бы просто использовать SimpleDateFormat
на самом деле разобрать и проверить, если это действительная дата:
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
formatter.parse("99-99-9999");
formatter.parse("18-07-2013");
Если дата недействительна это ll бросьте ParseException, который вы можете затем поймать и обработать ошибку соответствующим образом.
Edit:
Как Bohemian отметил, это на самом деле не сгенерирует исключение на 99-99-9999
входе. Вместо этого он вроде как «перекатывается», чтобы интерпретировать плохую дату как дату регистрации. Я думаю, что они, возможно, сделали это специально, чтобы облегчить арифметику даты. Например, 10-13-2000
становится 10-1-2001
после разбора (нет 13-го месяца, поэтому он станет первым месяцем следующего года). Если вы хотите, чтобы это исключало исключение, вам нужно сказать, чтобы это не было мягким:
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
formatter.setLenient(false); // <== Added this line
formatter.parse("99-99-9999");
formatter.parse("18-07-2013");
-1 Это может вас удивить, но этот код не выдает никаких исключений при его исполнении. Посмотрите, можете ли вы понять, почему. Если да, дайте мне знать, и я отменим нижний план. Это стоит того, чтобы понять это сами, потому что тогда вы не забудете это – Bohemian
@Bohemian - Вау, я действительно должен был проверить это. (К сожалению, у меня нет Scala, установленного на этой машине, и это то, что я обычно использую в качестве своего Java REPL.) Спасибо, что исправил меня. Я отредактировал свой ответ. – DaoWen
Вы не исправили его. У нас есть способ сделать это за исключение для недействительных дат вместо того, чтобы перевернуться. Продолжайте охотиться! – Bohemian
Вы уже узнали о регулярных выражениях? Это хороший способ проверить совпадения в форматировании. –
Существует два решения: один, который проверяет, что формат действителен, а другой проверяет, что не только формат, но и дата. Первое можно сделать с помощью простого регулярного выражения; второе может быть выполнено с помощью форматирования даты. – dasblinkenlight
Пожалуйста, объясните, какой тест вы пытаетесь запустить, разместите минимальные примеры. Помогите нам помочь! –