JavaRush/Блог/Java Developer/Вопрос-ответ: как в Java правильно конвертировать String ...

Вопрос-ответ: как в Java правильно конвертировать String в int?

Статья из группы Java Developer
участников
Приблизительный уровень необходимых знаний: квест Java Syntax и немного Java Core.
Вопрос-ответ: как в Java правильно конвертировать String в int?   - 1
В конце первого квеста JavaRush мы изучаем преобразование типов. В лекциях 10 уровня вы могли видеть, что преобразовать int в String — очень просто, и вообще практически любой примитивный тип приводится к String без проблем.
int x = 5;
String text = "X=" + x;
Также те, кто уже доучился до 10 уровня квеста Java Syntax, знают, что невозможно привести ссылку на число к ссылке на строку. Так как же лучше всего конвертировать строку в примитивное целое число? Делать это лучше с помощью метода parseInt класса Integer. Метод parseInt должен преобразовать String в int и выдает исключение NumberFormatException, если строка не может быть преобразована в тип int.

Пример

Основная строка, которая переводит строку в целое число:
int i = Integer.parseInt (myString);
Если строка, обозначенная переменной myString, является допустимым целым числом, например «1», «200», Java спокойно преобразует её в примитивный тип данных int. Если по какой-либо причине это не удается, подобное действие может вызвать исключение NumberFormatException, поэтому чтобы программа работала корректно для любой строки, нам нужно немного больше кода. Программа, которая демонстрирует метод преобразования Java String в int, управление для возможного NumberFormatException:
public class JavaStringToIntExample
{
  public static void main (String[] args)
  {
    // String s = "fred";  // используйте это, если вам нужно протестировать //исключение ниже
String s = "100";

    try
    {
      // именно здесь String преобразуется в int
      int i = Integer.parseInt(s.trim());

      // выведем на экран значение после конвертации
      System.out.println("int i = " + i);
    }
    catch (NumberFormatException nfe)
    {
      System.out.println("NumberFormatException: " + nfe.getMessage());
    }
  }

Обсуждение

Когда вы изучите пример выше, вы увидите, что метод Integer.parseInt (s.trim ()) используется для превращения строки s в целое число i, и происходит это в следующей строке кода:
int i = Integer.parseInt (s.trim ())
Но иногда перевести строку в число просто так не получится. В нашем примере такая строка — имя fred. Можно говорить о кодах, в которых буквы записываются в компьютере, но, формально говоря, fred никакое не число, и лучше его оставить строкой. Наша программа организована так, что при попытке преобразования «фреда» в число процесс Integer parseInt вызовет исключение NumberFormatException, которое вы должны обрабатывать в блоке try / catch. В этом случае вам не обязательно использовать метод trim () класса String, но в реальном программировании вы должны его использовать. Так что мы его вам продемонстрировали. Раз уж поднялась такая тема, вот вам несколько «хинтов» по теме о классах String и Integer:
  • Integer.toString (int i) используется для преобразования int в строки Java.
  • Если вы хотите преобразовать объект String в объект Integer (а не примитивный класс int), используйте метод valueOf () для класса Integer вместо метода parseInt ().
  • Если вам нужно преобразовать строки в дополнительные примитивные поля Java, используйте такие методы, как Long.parseLong () и ему подобные.
Автор ответа: Элис Уотсон
Комментарии (8)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Евгений
Уровень 34
12 июня, 14:06
только со второго прочтения понял разницу valueOf от parseInt по невимательности. Надо было оракловую доку курнуть
Obema Garmonovich System Engineer
21 декабря 2020, 17:38
Автор статьи писать не умеет похоже. Вообще не понятен код, который тут приводится, что за конструкции такие не рассказано. В 4 уровне есть сложная задача с конвертацией типов данных, так вот данный материал не возможно воспринять в том виде, в котором он есть. Такая подача - ни о чём.
misha_lazarev
Уровень 34
26 октября 2021, 08:15
Стало легче осознавать что на 4 уровне с таким же моментом столкнулся.
Светлана
Уровень 38
26 октября 2021, 09:52
Только он на 4 уровне так и остался))
Евгений
Уровень 27
3 декабря 2020, 14:30
Нравится, как автор советует почитать начинающим сразу Распространенные ошибки новичков, а затем херачит сразу Регулярные выражения :D
Роман Перминов
Уровень 27
13 февраля 2018, 09:47
По опыту работы вообще было бы правильнее все же безболезненно и без исключений. Мне кажется надо что бы была функция возвращала значение по умолчанию, если что-то пошло не так.
import org.junit.Test;

import static org.junit.Assert.assertEquals;

public class myParse {


    public static int myParseInt (String s, int defaultCode)
    {
        try
        {
            return Integer.parseInt(s.trim());
        }
        catch (NumberFormatException nfe)
        {
            return defaultCode;
        }
    }


    @Test
    public void testMyParseInt () {
        assertEquals(15, myParseInt("15", -1));
        assertEquals(15, myParseInt("15 ", -1));
        assertEquals(-1, myParseInt("as15", -1));
        assertEquals(15, myParseInt(" 15", -1));
    }
}
Boris Tseringer
Уровень 2
Expert
3 марта 2018, 08:18
И где тут у тебя без исключений?
Роман Перминов
Уровень 27
12 марта 2018, 03:30
Не правильно выразился, неверное. Сама функция не выбрасывает исключений. Исключение может возникнуть внутри и успешно обработаться, вернув defaultCode.