Это объясняется в документах раздела «Порядок оценки» :
... при оценке присвоения правая часть оценивается перед левой стороной.
public void setYear(String year) {
if (Integer.parseInt(year) >= 0) {
//Do stuff here
}
}
Используйте Integer.parseInt (String s) , чтобы проверить, можно ли преобразовать год строки в целое число, большее или равное нулю (логически, год не может быть отрицательным). Если вход не может быть преобразован в целое число, он выдаст исключение NumberFormatException .
Я могу предложить 2 способа сделать это.
Предположим, что строка, которую нужно проверить, равна strYear
, и вы считаете действительными все целочисленные значения> = 0.
Первый - принудительное приведение строки к целому числу и отлов любой сброшенной ошибки:
int year = -1;
try {
year = Integer.parseInt(strYear);
} catch (NumberFormatException e) {
e.printStackTrace();
}
boolean validYear = (year >= 0);
Второй - удаление всех нечисловых символов в строке и сравнение результата с исходной строкой. Если они одинаковы, то строка состоит только из цифр:
strYear = strYear.trim();
String strOnlyDigits = strYear.replaceAll("\\D", "");
boolean validYear = (!strYear.isEmpty() && strYear.equals(strOnlyDigits));
public int year;
public void setYear(String year){
try {
year = Integer.parseInt(year);
} catch(Exception e) {
e.printStackTrace();
}
}
Вы можете использовать try и catch, чтобы проверить, является ли ввод числа. Здесь вы пытаетесь разобрать строку в целое число. Если он содержит только число, он сможет успешно преобразовать его. С другой стороны, если у него есть другие символы, он остановится, и вы получите исключение. Try and catch предотвращает сбой вашей программы.
В то же время вы можете попробовать регулярное выражение, чтобы проверить, содержит ли оно только число.
String regex = "[0-9]+";
year.matches(regex );