Привет, У меня есть этот код для преобразования String в int вручную.
int num = 0;
for(int i = 0; i < length(number); i++) {
num *= 10;
num += number.charAt(i) - '0';
println("i :" + num);
}
Почему мы вычитаем "0" в конце?
Метод .charAt(int position)
возвращает один символ из вашей числовой строки. Поскольку ваша строка содержит номер, вы получите символ, который содержит цифру (0 - 9
). Следующим шагом будет преобразование этого символа в int.
наивное решение было бы:
char digit = number.charAt(i);
if (digit == '0') {
num += 0;
} else if (digit == '1') {
num += 1;
}
Но мы можем использовать значения ASCII наших символов, чтобы упростить это. Взгляните на эту таблицу ASCII (только столбцы "Dec" и "Chr"). Вы увидите, что символ 0
фактически имеет значение 48. Поэтому, если мы вычтем 48 из нашего символа, мы получим правильное значение:
int num = digit - 48;
Это может быть даже упрощено путем непосредственного размещения символа, который будет заменен компилятором:
int num = digit - '0';
пример:
символ '4'
имеет значение ASCII 52
. Если мы выберем 48
получим 4, который является искомым результатом.
Если number
является String
интерпретируемой как число, number.charAt(i)
является символом от '0' —— '9'
, если вы представляете char
виде чисел, это будет 0 —— 9
, переместится в код '0'
(что-то вроде '0' —— '0' + 9
), поэтому для получения точной цифры (как int
: number) вы должны вычесть код '0'
из char
.
Символ "0" равен знаку 48.
'0' 48
'1' 49
'2' 50
...
'9' 57
Пример:
Если number.charAt(i) было "9", а 9 "- символ 57, то 57 - 48 = 9
Значение ASCII '0' равно 48, '1' равно 49 и так далее. Пример: если переменная char chor содержит "5", теперь значение ASCII "5" равно 53. Если мы хотим выполнить математическую операцию "5", мы должны преобразовать ее в int, чтобы мы получили ее целочисленное значение, поэтому мы используем ch- '0' (это означает '5' - '0', что означает 53-48, то есть 5), делая это, мы получаем целое значение '5'. Теперь мы можем выполнить математическую операцию. Если вы выполняете математическую операцию на "5", компилятор будет рассматривать ее как 53.
char
на самом делеshort
интерпретируется по-другому. Таким образом, вы рассчитываете «расстояние от'0'
»