【问题标题】:java convert to intjava转换成int
【发布时间】:2012-03-12 16:15:36
【问题描述】:

我正在尝试像这样转换为 int,但出现异常。

    String strHexNumber = "0x1";
    int decimalNumber = Integer.parseInt(strHexNumber, 16);
    Exception in thread "main" java.lang.NumberFormatException: For input string: "0x1"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:458)

如果有人能修复它,那将是一个很大的帮助。

谢谢。

【问题讨论】:

    标签: java


    【解决方案1】:

    那是因为 0x 前缀是不允许的。这只是 Java 语言的东西。

    String strHexNumber = "F777";
    int decimalNumber = Integer.parseInt(strHexNumber, 16);
    System.out.println(decimalNumber);
    

    如果您想解析带有前导 0x 的字符串,请使用 Integer、Long 等可用的 .decode 方法。

    int value = Integer.decode("0x12AF");
    System.out.println(value);
    

    【讨论】:

      【解决方案2】:

      当然——如果你想使用parseInt,你需要去掉“0x”部分:

      int parsed = Integer.parseInt("100", 16);
      System.out.println(parsed); // 256
      

      如果您知道您的值将以“0x”开头,您可以使用:

      String prefixStripped = hexNumber.substring(2);
      

      否则,只测试它:

      number = number.startsWith("0x") ? number.substring(2) : number;
      

      请注意,您还应该考虑如何表示负数。

      编辑:亚当使用decode 的解决方案肯定会起作用,但如果您已经知道基数,那么 IMO 明确说明它比推断它更清楚 - 特别是如果它会让人们感到惊讶“035”被视为以八进制为例。当然,每种方法都适用于不同的时间,因此两者都值得了解。选择最干净、最清楚地处理您的特定情况的那个。

      【讨论】:

      • 没有必要。查看我的解决方案。
      【解决方案3】:

      Integer.parseInt 只能解析格式化为看起来像 int 的字符串。所以你可以解析“0”或“12343”或“-56”,但不能解析“0x1”。

      【讨论】:

        【解决方案4】:

        在要求 Integer 类解析它之前,您需要从字符串的前面去掉 0xparseInt 方法要求传入的字符串仅为指定基数的数字/字母。

        【讨论】:

          【解决方案5】:

          尝试在此处使用此代码:-

          import java.io.*;
           import java.lang.*;
          
          public class  HexaToInteger{
          
             public static void main(String[] args) throws IOException{
          
             BufferedReader read = 
          
             new BufferedReader(new InputStreamReader(System.in));
          
             System.out.println("Enter the hexadecimal value:!");
          
             String s = read.readLine();
          
             int i = Integer.valueOf(s, 16).intValue();
          
             System.out.println("Integer:=" + i);
          
             }
          
           }
          

          【讨论】:

          • 那么数字格式是错误的,因为 java 不识别他的 0x1 数字。
          • 被问到的问题是如何转换带有 0x 前缀的字符串......而不是那些没有......
          【解决方案6】:

          是的,Integer 仍然期待某种数字字符串。那个 x 真的会把事情搞砸的。

          【讨论】:

            【解决方案7】:

            根据十六进制的大小,您可能需要使用 BigInteger(您可以跳过“L”检查并在您的中进行修剪;-)):

                    // Convert HEX to decimal
                    if (category.startsWith("0X") && category.endsWith("L")) {
                        category = new BigInteger(category.substring(2, category.length() - 1), 16).toString();
                    } else if (category.startsWith("0X")) {
                        category = new BigInteger(category.substring(2, category.length()), 16).toString();
                    }
            

            【讨论】:

              猜你喜欢
              • 2014-02-14
              • 2013-10-16
              • 1970-01-01
              • 2010-12-29
              • 2013-06-02
              • 2020-11-21
              • 1970-01-01
              • 1970-01-01
              • 2021-01-27
              相关资源
              最近更新 更多