Обычно использование исключений для вещей, которые являются частью логики вашей программы, вызывает недовольство. Ваша логика должна быть:
if(The Input is well formed){
parse the date
}else{
Tell the user that the input is wrong
}
Но ваша программа:
try{
parse the date
}catch(){
tell the user the input is wrong
}
Чтобы определить, правильно ли введены данные, вы можете проверить их на длину, получить подстроку месяца, как вы делаете, и проверить ее на длину, получить подстроку дня и проверить, является ли она целым числом и т. Д. И т. Д.
Программа никогда не должна генерировать исключение StringIndexOutOfBoundsException, потому что это то, что вы можете проверить, прежде чем использовать метод подстроки.