【问题标题】:If a String containing a number bigger than Integer.MAX_VALUE如果 String 包含大于 Integer.MAX_VALUE 的数字
【发布时间】:2018-12-06 08:42:46
【问题描述】:

我想查找是否给定字符串“99999999999999999999999999”或任何不适合任何数据类型的大量数字。我想知道该数字是否大于 Integer.MAX_VALUE

【问题讨论】:

    标签: java string int


    【解决方案1】:

    使用BigInteger

    BigInteger maxInt = BigInteger.valueOf(Integer.MAX_VALUE);
    BigInteger value = new BigInteger("whatever");
    
    if (value.compareTo(maxInt) > 0)
    {
        // larger
    }
    

    【讨论】:

      【解决方案2】:

      您可以从字符串构造一个BigInteger 对象,然后将该BigIntegerInteger.MAX_VALUE 进行比较。

      【讨论】:

        【解决方案3】:

        你可以调用parseInt并捕捉NumberFormatException,如果数字太大会抛出(但如果String有非数字字符也会抛出)。

        如果要避免异常,可以运行以下检查:

        • 如果String 的字符数超过 10 个(如果第一个字符是“-”或“+”,则为 11 个),它必须大于 Integer.MAX_VALUE 或小于 Integer.MIN_VALUE
        • 否则,调用Long.parseLong() 并将结果与​​Integer.MAX_VALUE 进行比较。

        【讨论】:

          【解决方案4】:

          您可以将其解析为 int 并捕获异常或 BigInteger,也可以进行 String 比较。

          static final String MAX_INT_STR = Integer.toString(Integer.MAX_VALUE);
          
          public static boolean checkInt(String s) {
              return s.length() > MAX_INT_STR.length() || s.compareTo(MAX_INT_STR) > 0;
          }
          

          这可以用来避免在尝试解析之前抛出一些异常。

          注意:这不会检查它是否只包含数字,但如果它是一个正数,它将检查它是否在边界内而不解析字符串。

          【讨论】:

            【解决方案5】:

            尝试以下代码来检查它是否太大而无法放入整数:

            String num = "99999999999999999999999999";
            
            try {
                Integer.parseInt(num);
            } catch(NumberFormatException ex) {
                System.out.println("String did not fit in integer datatype");
            }
            

            此代码将尝试将 num 解析为整数,我们可以在出现错误时捕获并在发生错误时执行代码(在本例中为简单的 println)。

            来自parseInt()

            抛出:NumberFormatException - 如果字符串不包含 可解析整数。

            【讨论】:

            • 如果可能,最好避免对常规应用程序控制流使用异常。
            猜你喜欢
            • 2011-09-30
            • 1970-01-01
            • 1970-01-01
            • 2012-12-16
            • 2013-04-19
            • 1970-01-01
            • 2016-10-12
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多