На предыдущем этапе мы успешно преобразовали строку, содержащую только цифры, в целое число с помощью Integer.parseInt()
. Но что произойдет, если строка содержит символы, не являющиеся цифрами? Давайте узнаем.
Когда метод Integer.parseInt()
пытается преобразовать строку, которая не является корректным представлением числа, он выбрасывает исключение NumberFormatException
. Это тип ошибки, указывающий на проблему с форматом строки числа.
Для элегантной обработки таких ошибок мы можем использовать блок try-catch
. Блок try-catch
позволяет нам "попробовать" выполнить фрагмент кода, который может вызвать ошибку, и если ошибка возникает, мы можем "перехватить" ее и обработать ее определенным образом, предотвращая аварийное завершение программы.
Давайте модифицируем нашу программу StringToInt.java
, чтобы продемонстрировать это.
-
Откройте файл StringToInt.java
в редакторе WebIDE.
-
Измените код, добавив блок try-catch
и изменив входную строку:
public class StringToInt {
public static void main(String[] args) {
String numberString = "abc"; // This string cannot be parsed as an integer
try {
int numberInt = Integer.parseInt(numberString);
System.out.println("The string is: " + numberString);
System.out.println("The integer is: " + numberInt);
} catch (NumberFormatException e) {
System.out.println("Error: Could not convert the string to an integer.");
System.out.println("Details: " + e.getMessage());
}
}
}
Вот что мы добавили:
String numberString = "abc";
: Мы изменили строку на "abc"
, которая явно не является корректным целым числом.
try { ... }
: Код внутри блока try
- это то, что мы хотим попробовать выполнить. В данном случае это вызов Integer.parseInt()
.
catch (NumberFormatException e) { ... }
: Если в блоке try
возникает исключение NumberFormatException
, будет выполнен код внутри блока catch
.
System.out.println("Error: Could not convert the string to an integer.");
: Эта строка выводит понятное для пользователя сообщение об ошибке.
System.out.println("Details: " + e.getMessage());
: Эта строка выводит более подробную информацию об исключении, что может быть полезно для отладки.
-
Сохраните файл (Ctrl+S или Cmd+S).
-
Скомпилируйте модифицированную программу в терминале:
javac StringToInt.java
-
Запустите скомпилированную программу:
java StringToInt
На этот раз, так как строку "abc"
нельзя преобразовать в целое число, исключение NumberFormatException
будет перехвачено, и вы должны увидеть вывод, похожий на следующий:
Error: Could not convert the string to an integer.
Details: For input string: "abc"
Вместо аварийного завершения программы блок catch
обработал ошибку и вывел полезное сообщение. Это намного лучше для пользователя!
Использование блоков try-catch
является важной частью написания надежных программ, которые могут обрабатывать неожиданный ввод или ситуации.