Ответ 1
Как насчет Character.getNumericValue
?
С учетом следующего кода:
char x = '5';
int a0 = x - '0'; // 0
int a1 = Integer.parseInt(x + ""); // 1
int a2 = Integer.parseInt(Character.toString(x)); // 2
int a3 = Character.digit(x, 10); // 3
int a4 = Character.getNumericValue(x); // 4
System.out.printf("%d %d %d %d %d", a0, a1, a2, a3, a4);
(версия 4 зачислена на: casablanca)
Что вы считаете "лучшим способом" для преобразования char в int? ( "наилучший путь" ~ = идиоматический способ)
Мы не преобразуем фактическое числовое значение char, а значение представления.
Например:.
convert('1') -> 1
convert('2') -> 2
....
Как насчет Character.getNumericValue
?
Я бы предпочел Character.digit
.
Первый метод. Он самый легкий и прямой, и отображает то, что вы можете делать на других языках (более низкого уровня). Конечно, его обработка ошибок оставляет желать лучшего.
Если скорость критическая (а не валидация, вы можете совместить результат) например.
char d0 = '0';
char d1 = '4';
char d2 = '2';
int value = d0 * 100 + d1 * 10 + d2 - '0' * 111;
Преобразуйте в Ascii, затем вычтите 48.
(int) '7' would be 55
((int) '7') - 48 = 7
((int) '9') - 48 = 9
Если вы хотите сделать это с помощью "царапины", вы можете использовать это, например:
String str = "98";
int number = 0;
number = str.charAt(0) - '0';
number += str.charAt(1) - '0';
System.out.println(number);
консоль: 98
В этом случае используются значения ASCII, назначенные chars
'9' и '8' (соответственно 57 и 56), а затем, если вы вычтите нуль char
'0', вы вычитаете 48 от каждого числа char
, что дает эквивалент int
. Так как char
'9' имеет значение ASCII 57... 57 - 48 = 9.
Лучший способ преобразовать символ действительной цифры в значение int приведен ниже. Если c больше 9, то c не было цифрой. Ничто из того, что я знаю, не быстрее, чем это. Любые цифры в коде ASCII от 0-9 (48-57) ^ до '0' (48) всегда будут давать 0-9. От 0 до 65535 только от 48 до 57 дают от 0 до 9 в соответствующем порядке.
int charValue = (charC ^ '0');