Как мне обрабатывать неверную информацию при использовании метода подстроки?

#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() , чтобы избавиться от дополнительных пробелов.

Я думаю, вам нужно будет использовать оба подхода. Главное-подумать обо всех ошибках, которые может совершить пользователь, и учесть их. Также неплохо написать свои собственные тесты.