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