我想知道哪一个更好的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);}
for(Character c : s.toCharArray()){
int val = c -'a';
int val2 = Character.getNumericValue(c) - Character.getNumericValue('a');
System.out.println(val + " " + val2);
}
8oomwypt1#
重要的区别是区分大小写,行为如果 c 不是字母或数字。所以呢 val = c - 'a' 区分大小写,如果 c 不是一封信。另一方面, val2 = Character.getNumericValue(c) - Character.getNumericValue('a') 只对很小范围的 c ,但不区分大小写。例如, Character.getNumericValue('B') - Character.getNumericValue('a') 是1,因为大写和小写没有区别。 'B' - 'a' 是-31。只是因为。如果你想两全其美-适用于广泛的输入,但也不区分大小写,你可以写
c
val = c - 'a'
val2 = Character.getNumericValue(c) - Character.getNumericValue('a')
Character.getNumericValue('B') - Character.getNumericValue('a')
'B' - 'a'
val3 = Character.toLowerCase(c) - 'a';
p8h8hvxi2#
我想如果你只想得到字母表的位置,
a - 0b - 1..........z - 25
a - 0
b - 1
.....
z - 25
然后使用:
因为它不考虑大小写。另一方面,它们是完全不同的东西。如果查看“a”ascii值65和“a”ascii值97,但两者的数值都是相同的10。
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 valueSystem.out.println(Character.getNumericValue('A')); // prints 10 represents Unicode character 'A'
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);}
String s = "Wasi";
for (Character c : s.toCharArray()) {
int val = c - 'a';
输出
-10 220 018 188 8
-10 22
0 0
18 18
8 8
所以,在判断哪一个更好之前,你应该先想想你到底需要哪一个。还有一件重要的事要注意, Character.getNumericValue() 不考虑字符的大小写。例如, Character.getNumericValue('A') 以及 Character.getNumericValue('a') ,两者都返回值10。
Character.getNumericValue()
Character.getNumericValue('A')
Character.getNumericValue('a')
3条答案
按热度按时间8oomwypt1#
重要的区别是
区分大小写,
行为如果
c
不是字母或数字。所以呢
val = c - 'a'
区分大小写,如果c
不是一封信。另一方面,val2 = Character.getNumericValue(c) - Character.getNumericValue('a')
只对很小范围的c
,但不区分大小写。例如,
Character.getNumericValue('B') - Character.getNumericValue('a')
是1,因为大写和小写没有区别。'B' - 'a'
是-31。只是因为。如果你想两全其美-适用于广泛的输入,但也不区分大小写,你可以写
p8h8hvxi2#
我想如果你只想得到字母表的位置,
然后使用:
因为它不考虑大小写。
另一方面,它们是完全不同的东西。如果查看“a”ascii值65和“a”ascii值97,但两者的数值都是相同的10。
b0zn9rqh3#
我相信你首先需要知道ascii和unicode的区别。
ascii定义了128个字符,这些字符Map到数字0–127。unicode定义了(少于)221个字符,类似地,这些字符Map到数字0–221(尽管当前并不是所有的数字都被分配,有些是保留的)。所以,简而言之,unicode是ascii的超集。
参考资料:ascii和unicode有什么区别?
例子
使用ascii值和unicode字符表示的值不相同。例如。
现在,如果我们研究一下你的例子,区别就很明显了。
输出
所以,在判断哪一个更好之前,你应该先想想你到底需要哪一个。
还有一件重要的事要注意,
Character.getNumericValue()
不考虑字符的大小写。例如,
Character.getNumericValue('A')
以及Character.getNumericValue('a')
,两者都返回值10。