Лично я бы сохранил массив допустимых разделителей следующим образом:
static final String[] validSeparators = new String[] {"-","/","."};
Вы можете переместить проверку разделителя на сам метод setCalendarDate
, проверяя, содержит ли строка какой-либо из соответствующих символов. Затем я бы реорганизовал метод, чтобы вызвать исключение для недопустимых разделителей, и удалил аргумент разделителя.
static void setCalendarDate(final Calendar cal, final String date) throws ParseException{
String separator = null;
for(String s : validSeparators) {
if(date.contains(s)) {
separator = s;
break;
}
}
if(separator == null) {
throw new ParseException("No valid separator found", 0);
}
final String[] splitDate = date.split(separator);
cal.set(Integer.parseInt(splitDate[0]), Integer.parseInt(splitDate[1]) - 1, Integer.parseInt(splitDate[2]));
}
Другой вариант - проверить определенный символ строки даты:
static void setCalendarDate(final Calendar cal, final String date) throws ParseException{
String separator = String.valueOf(date.charAt(4));
if(Arrays.asList(validSeparators).contains(separator)) {
final String[] splitDate = date.split(separator);
cal.set(Integer.parseInt(splitDate[0]), Integer.parseInt(splitDate[1]) - 1, Integer.parseInt(splitDate[2]));
} else {
throw new ParseException("Valid separator not found", 0);
}
}
Если вам нужна дополнительная безопасность, вы также можете проверить 7-й символ и сравнить их до разделения.
Наконец, ваш главный файл теперь будет выглядеть так:
final Calendar cal = Calendar.getInstance();
if (args.length != 0) {
try {
setCalendarDate(cal, args[0]);
} catch (ParseException ex) {
ex.printStackTrace();
}
}
final int weekDay = cal.get(Calendar.DAY_OF_WEEK);
System.out.printf("%sday\n", weekDays[weekDay - 1]);