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

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

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

  1. for(Character c : s.toCharArray()){
  2. int val = c -'a';
  3. int val2 = Character.getNumericValue(c) - Character.getNumericValue('a');
  4. System.out.println(val + " " + val2);
  5. }
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。只是因为。
如果你想两全其美-适用于广泛的输入,但也不区分大小写,你可以写

  1. val3 = Character.toLowerCase(c) - 'a';
p8h8hvxi

p8h8hvxi2#

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

  1. a - 0
  2. b - 1
  3. .....
  4. .....
  5. z - 25

然后使用:

  1. 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字符表示的值不相同。例如。

  1. System.out.println((int)'A'); // prints 65, ASCII value
  2. System.out.println(Character.getNumericValue('A')); // prints 10 represents Unicode character 'A'

现在,如果我们研究一下你的例子,区别就很明显了。

  1. String s = "Wasi";
  2. for (Character c : s.toCharArray()) {
  3. int val = c - 'a';
  4. int val2 = Character.getNumericValue(c) - Character.getNumericValue('a');
  5. System.out.println(val + " " + val2);
  6. }

输出

  1. -10 22
  2. 0 0
  3. 18 18
  4. 8 8

所以,在判断哪一个更好之前,你应该先想想你到底需要哪一个。
还有一件重要的事要注意, Character.getNumericValue() 不考虑字符的大小写。
例如, Character.getNumericValue('A') 以及 Character.getNumericValue('a') ,两者都返回值10。

展开查看全部

相关问题