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

fafcakar  于 2021-07-09  发布在  Java
关注(0)|答案(3)|浏览(356)

我想知道哪一个更好的val或val2得到的整数值Map字符到整数?

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

8oomwypt1#

重要的区别是
区分大小写,
行为如果 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';
p8h8hvxi

p8h8hvxi2#

我想如果你只想得到字母表的位置,

a - 0
b - 1
.....
.....
z - 25

然后使用:

int val2 = Character.getNumericValue(c) - Character.getNumericValue('a');

因为它不考虑大小写。
另一方面,它们是完全不同的东西。如果查看“a”ascii值65和“a”ascii值97,但两者的数值都是相同的10。

b0zn9rqh

b0zn9rqh3#

我相信你首先需要知道ascii和unicode的区别。
ascii定义了128个字符,这些字符Map到数字0–127。unicode定义了(少于)221个字符,类似地,这些字符Map到数字0–221(尽管当前并不是所有的数字都被分配,有些是保留的)。所以,简而言之,unicode是ascii的超集。
参考资料:ascii和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。

相关问题