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。为什么会这样?
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
并将其减一。你需要知道的第一件事是字符也有一个数值,你可以用它们做数学运算。字符“1”的 ASCII 值是 49(看表:https ://www.cs.cmu.edu/~pattis/15-1XX/common/handouts/ascii.html )。因此,该charAt(i)
调用返回表示 的字符,1
其值为49
,然后将其减少1
,从而得到48
。
您需要在减少字符值之前将其转换为 Int 。尝试:
Character.getNumericValue(s.charAt(i)) - 1
Java 通常不对字符进行数学运算。因此,只要从 a 中减去 1 char
,Java 就会首先将其转换为int
,然后从中减去 1 int
。正如另一个答案所解释'1'
的,转换为 49,因此减法后得到 48。
如果您想要 char before ,只需在打印之前'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 ? >
我认为您遇到的问题是您获得了角色价值。在对其进行任何数学运算之前,您应该尝试将字符串/字符转换为整数。