【问题标题】:Converting characters to integers in Java在Java中将字符转换为整数
【发布时间】:2013-10-23 15:49:57
【问题描述】:

谁能给我解释一下这里发生了什么:

char c = '+';
int i = (int)c;
System.out.println("i: " + i + " ch: " + Character.getNumericValue(c));

这会打印出i: 43 ch:-1。这是否意味着我必须依靠原始转换将char 转换为int?那么如何将Character 转换为Integer

编辑: 是的,我知道Character.getNumericValue 返回-1,如果它不是一个数值,这对我来说是有意义的。问题是:为什么进行原始转换会返回43

Edit2: 43+ 的 ASCII,但我希望转换不会成功,就像 getNumericValue 没有成功一样。否则这意味着有两种语义等效的方式来执行相同的操作但结果不同?

【问题讨论】:

  • 你期望得到什么而不是43
  • 我不认为getNumericValue 做你认为它做的事。这是一种将字符转换为整数的实用方法(例如,将字符“5”转换为整数 5)。这与强制转换(将字符 '5' 转换为整数 53)不同。
  • 关键是转换不会返回数字的数值。这两个操作做了两个不同的事情。

标签: java integer type-conversion character primitive


【解决方案1】:
Character.getNumericValue(c)

java.lang.Character.getNumericValue(char ch) 返回指定 Unicode 字符表示的 int 值。例如,字符 '\u216C'(罗马数字 50)将返回一个值为 50 的 int。

大写字母 AZ ('\u0041' through '\u005A')、小写字母 ('\u0061' through '\u007A') 和全角变体 ('\uFF21' through '\uFF3A' and '\uFF41' through '\uFF5A') 形式的数值范围为 10 到 35。这与 Unicode 规范无关,Unicode 规范不为这些形式分配数值字符值。

此方法返回字符的数值,作为 非负整数值;

-2 如果字符的数值不是非负整数;

-1 如果字符没有数值。

here 是链接。

【讨论】:

    【解决方案2】:

    正如文档明确指出的那样,Character.getNumericValue() 将字符的值作为数字返回。
    如果字符不是数字,则返回-1

    如果您想获取已装箱的 Character 对象的数字 Unicode 代码点,您需要先将其拆箱:

    int value = (int)c.charValue();
    

    【讨论】:

    【解决方案3】:

    尝试以下任一方法。这些应该可以工作:

    int a = Character.getNumericValue('3');
    int a = Integer.parseInt(String.valueOf('3');
    

    【讨论】:

      【解决方案4】:

      来自Character#getNumericValue 的 Javadoc:

      如果字符没有数值,则返回-1。 如果字符具有无法表示为的数值 非负整数(例如,小数值),则 -2 为 返回。

      字符+ 没有数值,所以你得到-1。

      更新:

      原始转换给你 43 的原因是字符“+”被编码为整数 43。

      【讨论】:

        【解决方案5】:

        43 是“+”符号的 dec ascii 数字。这就解释了为什么你会得到 43 的回报。 http://en.wikipedia.org/wiki/ASCII

        【讨论】:

          【解决方案6】:
          public class IntergerParser {
          
          public static void main(String[] args){
          String number = "+123123";
          System.out.println(parseInt(number));
          }
          
          private static int parseInt(String number){
              char[] numChar = number.toCharArray();
              int intValue = 0;
              int decimal = 1;
              for(int index = numChar.length ; index > 0 ; index --){
                  if(index == 1 ){
                      if(numChar[index - 1] == '-'){
                          return intValue * -1;
                      } else if(numChar[index - 1] == '+'){
                          return intValue;
                      }
                  }
                  intValue = intValue + (((int)numChar[index-1] - 48) * (decimal));
                  System.out.println((int)numChar[index-1] - 48+ " " + (decimal));
                  decimal = decimal * 10;
              }
              return intValue;
          }
          

          【讨论】:

            猜你喜欢
            • 2011-05-12
            • 2017-12-04
            • 2012-08-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多