JavaRush /Java блог /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 () и ему подобные.
Автор ответа: Элис Уотсон
Комментарии (7)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Obema Garmonovich Уровень 4
21 декабря 2020
Автор статьи писать не умеет похоже. Вообще не понятен код, который тут приводится, что за конструкции такие не рассказано. В 4 уровне есть сложная задача с конвертацией типов данных, так вот данный материал не возможно воспринять в том виде, в котором он есть. Такая подача - ни о чём.
Евгений Уровень 27
3 декабря 2020
Нравится, как автор советует почитать начинающим сразу Распространенные ошибки новичков, а затем херачит сразу Регулярные выражения :D
Роман Перминов Уровень 27
13 февраля 2018
По опыту работы вообще было бы правильнее все же безболезненно и без исключений. Мне кажется надо что бы была функция возвращала значение по умолчанию, если что-то пошло не так.

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));
    }
}