charAt(index)-1函数返回错误输出的原因


String s = "1234";
for(int i=0;i<s.length();i++)
{
System.out.println(s.charAt(i));
System.out.println(s.charAt(i)-1);  
}

在上面的代码行中,对于第一次迭代,即当i=0时,第一行应该打印1,第二行应该打印0,但第二行打印48。为什么会这样?

s.charAt(i)-1

此行获取索引i处的字符,并将其减少一。你需要知道的第一件事是,字符也有一个数值,你可以用它们来计算。字符"的ASCII值;1〃;是49(看看表:https://www.cs.cmu.edu/~pattis/15-XX/common/atchards/ascii.html(。因此,charAt(i)调用返回代表1的字符,其值为49,然后将其减少1,得到48

在减少字符值之前,您需要将其转换为Int。尝试:

Character.getNumericValue(s.charAt(i)) - 1

我认为您遇到的问题是获取字符值。在对字符串/字符进行任何计算之前,您应该尝试将其转换为整数

Java通常不会对字符进行数学运算。因此,一旦从char中减去1,Java就会首先将其转换为int,然后从该int中减去1。正如另一个答案所解释的,'1'被转换为49,所以减法后得到48。

如果您想要'1'之前的字符,只需在打印前转换回char即可:

String s = "1234";
for (int i = 0; i < s.length(); i++) {
System.out.println(s.charAt(i));
System.out.println((char) (s.charAt(i) - 1));
}

输出:

1
0
2
1
3
2
4
3

然后它也适用于字母和标点符号:

String s = "Wtf?";
W
V
t
s
f
e
?
>

最新更新