Я играл с методом.substring в Java и сталкивался с ошибкой, которую я не понимаю. Если у меня есть строка, представляющая прогноз:
String forecast = "Sat, 7 Feb - Snow - -8/-13"
Я могу выделить данные о температуре, позвонив
int lastWhitespaceIndex = forecast.lastIndexOf(" ");
int highs = Integer.parseInt(forecast.substring(lastWhitespaceIndex + 1));
Однако, если я изменю вторую строку на
int highs = Integer.parseInt(forecast.substring(lastWhitespaceIndex));
Моя программа вылетает. Есть ли правило о том, что нельзя начинать с строки с пробелами, о которых я не знаю?
В документации Integer.parseInt() четко указано:
Символы в строке должны быть десятичными цифрами, за исключением того, что первым символом может быть знак минус ASCII "-" ("\ u002D"), чтобы указать отрицательное значение или знак ASCII плюс "+" ("\ u002B") для указания положительного значения.
Итак, никаких пробелов для начала.
Причина в том, что подстрока вернет -8 / -13
и что косая черта не является diget, поэтому это не сработает. Разделите его на косую черту, и все готово.
int lastWhitespaceIndex = forecast.lastIndexOf(" ");
int lastSlashIndex = forecast.lastIndexOf("/");
int highs = Integer.parseInt(forecast.substring(lastWhitespaceIndex + 1, lastSlashIndex));
В моем тесте оба подхода не сработали. Если вы используете Integer.parse (значение), значение может содержать только число. Если нет, вы получаете NumberFormatException
.
public static int parseInt (String s) throws NumberFormatException Разбирает строковый аргумент в виде десятичного целого числа со знаком. Символы в строке должны быть десятичными цифрами, за исключением того, что первым символом может быть знак минус ASCII "-" ("\ u002D"), чтобы указать отрицательное значение или знак ASCII плюс "+" ("\ u002B") для указания положительного значения. Полученное целочисленное значение возвращается точно так же, как если бы аргумент и radix 10 были указаны как аргументы метода parseInt (java.lang.String, int).
Параметры: s - строка, содержащая представление int, подлежащее анализу
Возвращает: целочисленное значение, представленное аргументом в десятичном значении. Throws: NumberFormatException - если строка не содержит синтаксическое целое число.