Java 要存储在数组中的字符的整数值
我想知道在获取将字符映射到整数的整数值时,哪一个更适合val或val2Java 要存储在数组中的字符的整数值,java,ascii,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); } 我相信您首先需要知道ASCII和Unicode之间的区别 ASCI
for(Character c : s.toCharArray()){
int val = c -'a';
int val2 = Character.getNumericValue(c) - Character.getNumericValue('a');
System.out.println(val + " " + val2);
}
我相信您首先需要知道ASCII和Unicode之间的区别 ASCII定义128个字符,这些字符映射到数字0–127。Unicode定义了(少于)221个字符,类似地,这些字符映射到数字0–221(尽管当前并非所有数字都已分配,有些数字是保留的)。简而言之,Unicode是ASCII的超集 参考: 示例 使用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
所以,在判断哪一个更好之前,你应该考虑你真正需要的是哪一个
一个更重要的事情要注意,<代码>字符。GETMultualValueMe()/Case>不考虑字符的情况(下或上)。
例如,
Character.getNumericValue('A')
和Character.getNumericValue('A')
,两者都返回值10。我认为您需要先了解ASCII和Unicode之间的区别
ASCII定义128个字符,这些字符映射到数字0–127。Unicode定义了(少于)221个字符,类似地,这些字符映射到数字0–221(尽管当前并非所有数字都已分配,有些数字是保留的)。简而言之,Unicode是ASCII的超集
参考:
示例
使用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
所以,在判断哪一个更好之前,你应该考虑你真正需要的是哪一个
一个更重要的事情要注意,<代码>字符。GETMultualValueMe()/Case>不考虑字符的情况(下或上)。
例如,
Character.getNumericValue('A')
和Character.getNumericValue('A')
都返回值10。重要的区别是
- 区分大小写
- 当
不是字母或数字时的行为c
val=c-'a'
是区分大小写的,如果c
不是字母,它也会给出合理的结果。另一方面,val2=Character.getNumericValue(c)-Character.getNumericValue('a')
仅为c
的窄范围值提供合理的结果,但它不区分大小写
比如说,
为1,因为大小写没有区别Character.getNumericValue('B')-Character.getNumericValue('a')
是-31。只是因为'B'-'a'
val3 = Character.toLowerCase(c) - 'a';
重要的区别是
- 区分大小写
- 当
不是字母或数字时的行为c
val=c-'a'
是区分大小写的,如果c
不是字母,它也会给出合理的结果。另一方面,val2=Character.getNumericValue(c)-Character.getNumericValue('a')
仅为c
的窄范围值提供合理的结果,但它不区分大小写
比如说,
为1,因为大小写没有区别Character.getNumericValue('B')-Character.getNumericValue('a')
是-31。只是因为'B'-'a'
val3 = Character.toLowerCase(c) - 'a';
我想如果你只想得到字母表的位置
a - 0
b - 1
.....
.....
z - 25
然后使用:
int val2 = Character.getNumericValue(c) - Character.getNumericValue('a');
因为它不考虑上或小写。
另一方面,它们是完全不同的东西。如果你看“A”ASCII值65和“A”ASCII值97,但它们的数值都是相同的10。我想如果你只想得到字母表的位置,比如
a - 0
b - 1
.....
.....
z - 25
然后使用:
int val2 = Character.getNumericValue(c) - Character.getNumericValue('a');
因为它不考虑上或小写。
另一方面,它们是完全不同的东西。如果你看“A”ASCII值65和“A”ASCII值97,但它们的数值都是相同的10。这是一个完全基于观点的问题,但我肯定会选择第一种方法。它们做不同的事情。所以它不是基于意见的。这是一个你需要回答的问题(比如问摩托车是否比打蛋机好——你想去哪里旅行,还是打鸡蛋?)这是一个完全基于观点的问题,但我肯定会选择第一种方式。他们做不同的事情。所以它不是基于意见的。这是一个你需要解决的问题(比如问摩托车是否比打蛋机好——你想去哪里旅行,还是打蛋?)“Unicode定义(少于)221个字符”?说什么?它定义了成千上万个字符。很抱歉,我编辑了我的答案以反映正确的信息。请看一看中的参考答案,以便更清楚地了解。我觉得ASCII与Unicode与此无关。更多的是关于如何通过
getNumericValue
方法将字母转换成数字。“Unicode定义(少于)221个字符”?说什么?它定义了成千上万个字符。很抱歉,我编辑了我的答案以反映正确的信息。请看一看中的参考答案,以便更清楚地了解。我觉得ASCII与Unicode与此无关。更多的是关于如何通过getNumericValue
方法将字母转换成数字。