Глиф Учебники

Как перевести строку в число и обратно

Справочник · Java · 1 минута чтения

Строку с целым числом переводит в int метод Integer.parseInt, с дробным — Double.parseDouble:

Java
public class Main {
    public static void main(String[] args) {
        int a = Integer.parseInt("42");
        double b = Double.parseDouble("3.5");
        System.out.println(a + 1);
        System.out.println(b * 2);
        System.out.println(Integer.parseInt("-17"));
        System.out.println(Long.parseLong("9000000000"));
    }
}
Вывод
43
7.0
-17
9000000000

Для long — Long.parseLong. Integer.valueOf("42") делает то же, что parseInt, но возвращает объект Integer (о разнице — справка int и Integer).

Если в строке не число

Если строку нельзя прочитать как число, метод выбрасывает исключение NumberFormatException:

Текст
Exception in thread "main" java.lang.NumberFormatException: For input string: "abc"

Так бывает и с «почти числами»:

СтрокаInteger.parseInt
"42"42
" 42" или "42 "ошибка: пробелы не допускаются — сначала trim()
"3.5"ошибка: это не целое — нужен Double.parseDouble
"3000000000"ошибка: больше предела int — нужен Long.parseLong
"" (пустая строка)ошибка

Если строка приходит от пользователя, перехватите ошибку:

Java
public class Main {
    public static void main(String[] args) {
        String[] inputs = {"15", "abc", " 7 "};
        for (String s : inputs) {
            try {
                int n = Integer.parseInt(s.trim());
                System.out.println("Число: " + n);
            } catch (NumberFormatException e) {
                System.out.println("Не число: " + s);
            }
        }
    }
}
Вывод
Число: 15
Не число: abc
Число: 7

Подробнее о try и catch — в справке Исключения: try и catch.

Double.parseDouble понимает только точку: "3,5" даст NumberFormatException. Если пользователь пишет дробь через запятую, замените её: Double.parseDouble(s.replace(',', '.')).

Число в строку

Java
public class Main {
    public static void main(String[] args) {
        int n = 42;
        String a = String.valueOf(n);
        String b = Integer.toString(n);
        String c = "" + n;
        System.out.println(a + b + c);
        System.out.println(Integer.toBinaryString(10));
        System.out.println(Integer.parseInt("ff", 16));
    }
}
Вывод
424242
1010
255

Все три способа дают строку "42", поэтому при склейке получается 424242. Integer.toBinaryString переводит число в двоичную запись, а parseInt со вторым аргументом читает число в другой системе счисления — здесь шестнадцатеричной.

Символ-цифру в число

Символ '7' — это не число 7, а код символа. Чтобы получить цифру, вычтите код нуля:

Java
public class Main {
    public static void main(String[] args) {
        char digit = '7';
        System.out.println(digit - '0');
        System.out.println((int) digit);
        System.out.println(Character.getNumericValue(digit));
    }
}
Вывод
7
55
7

(int) '7' даёт 55 — код символа, а не цифру. Это частая ошибка при подсчёте суммы цифр числа, записанного строкой.