减去“0”以手动将String转换为int

时间:2014-05-22 10:01:00

标签: java parseint

您好我已经有了手动将String转换为int的代码。

int num = 0;
for(int i = 0; i < length(number); i++) {
    num *= 10;
    num += number.charAt(i) - '0';
    println("i :" + num);
}

为什么我们最后减去'0'?

4 个答案:

答案 0 :(得分:4)

方法.charAt(int position)返回数字字符串中的单个字符。由于您的字符串包含数字,您将收到一个包含数字(0 - 9)的字符。下一步是将此字符转换为int。

一个天真的解决方案是:

char digit = number.charAt(i);
if (digit == '0') {
    num += 0;
} else if (digit == '1') {
    num += 1;
}

但我们可以使用字符的ASCII值来简化这一点。看看this ASCII table(只有列'Dec'和'Chr')。您将看到字符0实际上具有值48.因此,如果我们从字符中减去48,我们将检索正确的值:

int num = digit - 48;

通过直接放置将被编译器替换的字符,甚至可以更简化:

int num = digit - '0';

示例:

字符'4'的ASCII值为52。如果我们减去48,我们得到4,这是想要的结果。

答案 1 :(得分:2)

如果number String被解释为数字,则number.charAt(i)是来自'0' —— '9'的字符,如果您将char表示为数字,则会{是0 —— 9,已移至'0'的代码(类似于'0' —— '0' + 9),因此要获得确切的数字(int:数字),您应该减去代码来自'0'的{​​{1}}。

答案 2 :(得分:1)

char&#39; 0&#39;相当于角色48。

'0' 48
'1' 49
'2' 50
...
'9' 57

示例:

如果number.charAt(i)是&#39; 9&#39;和9&#39;是字符57然后57 - 48 = 9

答案 3 :(得分:0)

'0'的ASCII值为48,'1'为49,依此类推。 示例:如果字符变量“ch”包含'5',则现在ASCII值为'5'为53.如果我们要执行数学运算'5',我们必须将其转换为int,因此我们必须得到它的整数值所以我们使用ch-'0'(即'5' - '0'表示53-48为5),这样我们得到的整数值为'5'。现在我们可以对此进行数学运算。如果对'5'执行数学运算,编译器会将其视为53。