Как перевести строку в число и обратно
Строку с целым числом переводит в int метод Integer.parseInt, с дробным — Double.parseDouble:
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 |
"" (пустая строка) | ошибка |
Если строка приходит от пользователя, перехватите ошибку:
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(',', '.')).
Число в строку
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, а код символа. Чтобы получить цифру, вычтите код нуля:
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 — код символа, а не цифру. Это частая ошибка при подсчёте суммы цифр числа, записанного строкой.