Довольно часто символьная информация, которую пользователи вводят с клавиатуры, должна быть преобразована в числа. В Java есть несколько методов, которые это делают. В этой статье мы разберемся с нми
Неявное приведение типов
Приведение типов — это процесс преобразования значения одного типа данных в значение другого типа данных.
Приведение типов может быть ручным или автоматическим в зависимости от типа даных. Типы должны быть совместимы. В Java у нас есть два типа приведения типов: явное и неявное.
Неявное можно выполнить только в том случае, если мы преобразуем переменную из «большего» в «меньший» тип (например, из int в long
). Если мы хотим преобразовать переменную типа char
в тип данных int
, чаще всего нам нужно получить ее эквивалентное значение из таблицы ASCII.
Каждый символ, который можно ввести в цифровом виде, имеет соответствующее уникальное целое число. Например, символ «A» имеет код ASCII 65. Приведением типов мы принудительно преобразуем значение символа в его эквивалентный целочисленный код ASCII.
Пример преобразования char в int на Java (использование typeCasting)
package charToInt;
public class Implicit {
public static void main(String[] args) {
char char1 = 'A';
char char2 = 'a';
int x = char1;
int y = char2;
System.out.println("ASCII value of '" + char1 + "' is " + x);
System.out.println("ASCII value of '" + char2 + "' is " + y);
}
}
Run CodeВывод:
ASCII value of 'A' is 65
ASCII value of 'a' is 97
Явное приведение типов
Как мы видели выше, в случае преобразования char в int
нет необходимости делать это явно, поскольку для хранения char
используется 2 байта, а для хранения int
— 4 байта. То есть тип int «больше». Тем не менее, в качестве упражнения мы можем явно привести переменную char к целому числу. Для этой операции мы будем использовать (int) в скобках.
package charToInt;
public class Explicit {
public static void main(String[] args) {
char char1 = 'A';
System.out.println("ASCII value of '" + char1 + "' is " + (int)char1);
}
}
Run CodeВывод:
ASCII value of 'A' is 65
Преобразование char в int с помощью getNumericValue()
getNumericValue()
работает аналогично приведению типов, но вместо следования таблице ASCII он следует стандарту кодировки Unicode.
ASCII может представлять только определенный набор символов и знаков, таких как латинские буквы, цифры, знаки препинания и управляющие символы.
Unicode содержит более миллиона значений, содержащих буквы и символы для каждого языка мира. Например, значение A в Unicode равно \u0041, что эквивалентно числовому значению 10.
Если символ не имеет числового значения, метод возвращает -1. Использование этого метода может быть удобным для возврата неотрицательных целых чисел.
package charToInt;
public class UsingGetNumericValue {
public static void main(String[] args) {
char char1 = '7';
char char2 = 'A';
char char3 = '*';
int x = Character.getNumericValue(char1);
int y = Character.getNumericValue(char2);
int z = Character.getNumericValue(char3);
System.out.println("The Unicode value of '" + char1 + "' is " + x);
System.out.println("The Unicode value of '" + char2 + "' is " + y);
System.out.println("The Unicode value of '" + char3 + "' is " + z);
}
}
Run CodeВывод:
The Unicode value of '7' is 7
The Unicode value of 'A' is 10
The Unicode value of '*' is -1
Преобразование char в int с помощью ParseInt()
ParseInt()
— еще один метод преобразования char в int
. Он также широко используется для преобразования между другими числовыми типами данных, такими как float, double и long.
ParseInt()
требует как минимум одного и как максимум двух аргументов. Первый аргумент — это имя переменной преобразуемого значения. Второй аргумент — это основание, которое ссылается на базовое значение десятичной, восьмеричной, шестнадцатеричной и т. д.
Благодаря способности ParseInt()
преобразовывать типы данных с учетом системы счисления, это оптимальный выбор для преобразования «числового» char в int
в Java. Есть два важных момента, которые следует иметь в виду, если вы хотите использовать этот метод. Метод parseInt()
принимает только строковые аргументы, поэтому сначала вам следует преобразовать char в String
(используя String.valueOf
). Вы не можете использовать parseInt()
для преобразования символов, за исключением числовых значений, хранящихся в типе данных char. Если вы введете нечисловые значения, вы получите ошибку.
Вот пример:
package charToInt;
public class ParseInt {
public static void main(String args[]){
char ch = '7';
int n = Integer.parseInt(String.valueOf(ch));
System.out.println(n);
}
}
Run CodeВывод:
7
Давайте попробуем использовать parseInt
для нечислового значения:
package charToInt;
public class ParseInt {
public static void main(String args[]){
char ch = 'q';
int n = Integer.parseInt(String.valueOf(ch));
System.out.println(n);
}
}
Run CodeВывод:
Exception in thread "main" java.lang.NumberFormatException: For input string: "q"
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68)
at java.base/java.lang.Integer.parseInt(Integer.java:652)
at java.base/java.lang.Integer.parseInt(Integer.java:770)
at charToInt.ValueOf.main(ValueOf.java:6)
Вычитание «0»
Существует очень простой способ преобразовать символа в целое число. Для этого просто вычтите ASCII-значение символа “0” из символа. Например, чтобы получить int 7 из символа “7”:
int intValue = '7'-' 0 ';
Run CodeОбратите внимание, что это работает для получения значений int исключительно для целых символов! Если вы вычтете ‘0’ из, скажем, ‘A’, метод просто вернет разницу между ASCII-кодами нуля и буквы A. Вот пример.
package charToInt;
public class SubtractingZero {
public static void main(String[] args) {
char char1 = '7';
char char2 = 'A';
char char3 = '*';
System.out.println(char1);
System.out.println(char1 - '0');
System.out.println(char2);
System.out.println(char2 - '0');
System.out.println(char3);
System.out.println(char3 - '0');
}
}
Run CodeВывод:
7 7 А 17 * -6
Выводы
Если вам необходимо преобразовать char в int в Java, используйте один из методов:
- Неявное приведение типов // получение значений ASCII
Character.getNumericValue()
Integer.parseInt()
// в паре сString.valueOf())
- Вычитание ‘0’ // работает только для целых числовых значений
Вы также можете сделать явное приведение типов. Однако это избыточная операция.
Перевод статьи «Convert Char to Int in Java with examples».