簡體   English   中英

如果String包含的數字大於Integer.MAX_VALUE

[英]If a String containing a number bigger than Integer.MAX_VALUE

我想找到給定的字符串“99999999999999999999999999”或任何不適合任何數據類型的大量數字。我想查找該數字是否大於Integer.MAX_VALUE

使用BigInteger

BigInteger maxInt = BigInteger.valueOf(Integer.MAX_VALUE);
BigInteger value = new BigInteger("whatever");

if (value.compareTo(maxInt) > 0)
{
    // larger
}

您可以從字符串構造一個BigInteger對象,然后將該BigIntegerInteger.MAX_VALUE進行比較。

你可以調用parseInt並捕獲NumberFormatException ,如果數字太大則拋出它(盡管如果String有非數字字符也會拋出它)。

如果要避免該異常,可以運行以下檢查:

  • 如果String有超過10個字符(如果第一個字符是' - '或'+',則為11),它必須大於Integer.MAX_VALUE或小於Integer.MIN_VALUE
  • 否則,調用Long.parseLong()並將結果與Integer.MAX_VALUE進行比較。

您可以將其解析為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;
}

這可以用來避免在嘗試解析之前拋出一些異常。

注意:這不會檢查它只包含數字,但如果它是一個正數,它將檢查它是否在邊界而不解析字符串。

嘗試以下代碼來檢查它是否太大而無法放入整數:

String num = "99999999999999999999999999";

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

此代碼將嘗試將num解析為整數,我們可以在出現錯誤時捕獲並在發生時執行代碼(在本例中為簡單的println )。

parseInt()

拋出:NumberFormatException - 如果字符串不包含可解析的整數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM