要存储在数组中的字符的整数值

时间:2017-01-04 02:20:31

标签: java ascii

我想知道哪个更好的val或val2来获取整数值来将字符映射到整数?

for(Character c : s.toCharArray()){
    int val = c -'a';
    int val2 = Character.getNumericValue(c) - Character.getNumericValue('a');
    System.out.println(val + " " + val2);
}

3 个答案:

答案 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。