#java #parsing #error-handling #format #substring
#Ява #разбор #обработка ошибок #формат #подстрока
Вопрос:
Я пытаюсь завершить проект, который принимает дату в формате: День месяца, Год, Пример: 1 декабря 1990 года. После ввода этой даты я пытаюсь вывести ее в формате Месяц/День/Год. Метод, который я должен использовать, — это подстрока. У меня возникают проблемы с ошибками при обработке дезинформации. Например, если запятой нет, то возникает ошибка и цикл завершается. Мне интересно, есть ли способ проверить каждое значение на наличие ошибки, а затем продолжить цикл, если ошибка обнаружена. Вот мой код до сих пор:
public static void main(String[] args) { Scanner scnr = new Scanner(System.in); // Flag to indicate next iteration String lineString = ""; String month; int year; int day; char comma; lineString = scnr.nextLine(); while(!lineString.equals(-1)) { month = lineString.substring(0, lineString.indexOf(" ")); day = Integer.parseInt(lineString.substring(lineString.indexOf(" ") 1, lineString.indexOf(',') )); comma = lineString.charAt(lineString.indexOf(',')); year = Integer.parseInt(lineString.substring(lineString.length()-4)); System.out.println(month); System.out.println(day); System.out.println(comma); System.out.println(year); lineString = scnr.nextLine(); }
Ответ №1:
Вы можете обернуть свой код внутри цикла while в блоке try-catch. Он перехватит ваше исключение без завершения программы.
Ответ №2:
Один из подходов состоит в том, чтобы перехватывать исключения. Это способ справиться с потенциальными исключениями из parseInt
; например, когда значение не является допустимым целым числом.
Другой подход заключается в том, чтобы сделать код более надежным, чтобы исключение вообще не возникало. Например:
- проверьте результаты
indexOf
вызовов, чтобы убедиться, что они не равны -1 … что означает «не найдено», и - не делайте предположений о количестве символов в каждом поле; например
lineString.length() - 4
- рассмотрите возможность использования
String.trim()
, чтобы избавиться от дополнительных пробелов.
Я думаю, вам нужно будет использовать оба подхода. Главное-подумать обо всех ошибках, которые может совершить пользователь, и учесть их. Также неплохо написать свои собственные тесты.