我想知道哪个更好的val或val2来获取整数值来将字符映射到整数?
for(Character c : s.toCharArray()){
int val = c -'a';
int val2 = Character.getNumericValue(c) - Character.getNumericValue('a');
System.out.println(val + " " + val2);
}
答案 0 :(得分:5)
我相信您首先需要了解ASCII和Unicode之间的区别。
ASCII定义128个字符,映射到数字0-127。 Unicode定义(小于)2个 21 字符,类似地,映射到数字0-2 21 (尽管并非所有数字当前都已分配,有些是保留的)。因此,简而言之,Unicode是ASCII的超集。
参考:What's the difference between ASCII and Unicode?
示例强>
使用ASCII值并且Unicode字符表示的值不相同。例如。
System.out.println((int)'A'); // prints 65, ASCII value
System.out.println(Character.getNumericValue('A')); // prints 10 represents Unicode character 'A'
现在,如果我们看一下你的例子,差异就会很明显。
String s = "Wasi";
for (Character c : s.toCharArray()) {
int val = c - 'a';
int val2 = Character.getNumericValue(c) - Character.getNumericValue('a');
System.out.println(val + " " + val2);
}
输出
-10 22
0 0
18 18
8 8
所以,在判断哪一个更好之前,你应该考虑一下你需要哪一个。
还有一点需要注意,Character.getNumericValue()
并不考虑字符的大小写(较低或较高)。
例如,Character.getNumericValue('A')
和Character.getNumericValue('a')
都返回值10。
答案 1 :(得分:2)
重要的区别是
c
不是字母或数字,则因此val = c - 'a'
区分大小写,如果c
不是字母,它也会给出合理的结果。另一方面,val2 = Character.getNumericValue(c) - Character.getNumericValue('a')
仅为c
的一小部分值提供合理的结果,但它不区分大小写。
例如,
Character.getNumericValue('B') - Character.getNumericValue('a')
为1,因为大写和小写没有区别。'B' - 'a'
是-31。只是因为。如果你想要两全其美 - 适用于各种输入,但也不区分大小写,你可以写
val3 = Character.toLowerCase(c) - 'a';
答案 2 :(得分:2)
我想如果你想只获得字母位置,
a - 0
b - 1
.....
.....
z - 25
然后使用:
int val2 = Character.getNumericValue(c) - Character.getNumericValue('a');
因为它不考虑大写或小写。
另一方面,它们是完全不同的东西。如果你看'A'ASCII值65和'a'ASCII值97,但两者的数值相同10。