7

我读了 Hello Android 书,我不理解这个函数的一段代码。

为什么我们在 charAt(i) 旁边使用 -'0'?

static protected int[] fromPuzzleString(String string) {
    int[] puz = new int[string.length()];
    for (int i = 0; i < puz.length; i++) {
        puz[i] = string.charAt(i) - '0' ;
    }
    return puz; 
 }

谢谢。干杯。

4

5 回答 5

9

因为string.charAt(i)回报char. 但是puzint[]

所以string.charAt(i) - '0'将其转换为整数。

于 2012-09-15T14:49:47.797 回答
4

您要做的是一次读取一个字符,将其转换为 int 并将其存储在您的数组中。

0 的 ASCII 码是 48。因此,您实际上要做的是从该特定位置的char的 ASCII 值中减去该值,然后将数字结果存储在相应的索引中。

如果您尝试在循环中将其打印出来,您可以自己验证它,例如:

System.out.println((int)string.charAt(i));
System.out.println((int)'0');
于 2012-09-15T15:09:20.823 回答
2

您最好使用Character.isDigit(char)andCharacter.getNumericValue(char)测试并将 char 转换为整数值。

于 2012-09-15T16:00:39.807 回答
1

字符串是一个数字。此代码会将字符串转换为整数数组。
string.charAt(i)将返回一个字符string.charAt(i)- '0'并将返回实际的整数值。
例如string="12345",这个方法会返回一个整数数组[1,2,3,4,5]。

于 2012-09-15T14:53:13.290 回答
0

我不知道这个特定操作的目的是什么,但是在 Java(以及许多编程语言)中,字符 ( char) 表示为一个整数值(在 java 中只有较小的 2 个字节)。您可以像这样将字符显式转换为整数:

int x = (int) 'a';

我认为这段代码做了类似的事情。该String.charAt()函数返回 a char,如果将其视为 int,则它的值类似于 120(仅作为示例)。'0' (作为 a char)也有一个值。如果你减去它们,你会得到一个整数值。

于 2012-09-15T14:54:39.267 回答