Что такое "java" способ преобразования символов (цифр) в ints

С учетом следующего кода:

    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
....

Ответ 2

Я бы предпочел Character.digit.

Ответ 3

Первый метод. Он самый легкий и прямой, и отображает то, что вы можете делать на других языках (более низкого уровня). Конечно, его обработка ошибок оставляет желать лучшего.

Ответ 4

Если скорость критическая (а не валидация, вы можете совместить результат) например.

char d0 = '0';
char d1 = '4';
char d2 = '2';
int value = d0 * 100 + d1 * 10 + d2 - '0' * 111;

Ответ 5

Преобразуйте в Ascii, затем вычтите 48.

(int) '7' would be 55 
((int) '7') - 48 = 7 
((int) '9') - 48 = 9 

Ответ 6

Если вы хотите сделать это с помощью "царапины", вы можете использовать это, например:

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.

Ответ 7

Лучший способ преобразовать символ действительной цифры в значение int приведен ниже. Если c больше 9, то c не было цифрой. Ничто из того, что я знаю, не быстрее, чем это. Любые цифры в коде ASCII от 0-9 (48-57) ^ до '0' (48) всегда будут давать 0-9. От 0 до 65535 только от 48 до 57 дают от 0 до 9 в соответствующем порядке.

int charValue = (charC ^ '0');