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

Java 要存储在数组中的字符的整数值,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

我想知道在获取将字符映射到整数的整数值时,哪一个更适合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之间的区别

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
的窄范围值提供合理的结果,但它不区分大小写

比如说,

  • Character.getNumericValue('B')-Character.getNumericValue('a')
    为1,因为大小写没有区别
  • 'B'-'a'
    是-31。只是因为
如果你想在这两个方面都做到最好——适用于广泛的输入,但又不区分大小写,你可以这样写

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

重要的区别是

  • 区分大小写
  • 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';

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

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
方法将字母转换成数字。