[英]If a String containing a number bigger than Integer.MAX_VALUE
我想找到給定的字符串“99999999999999999999999999”或任何不適合任何數據類型的大量數字。我想查找該數字是否大於Integer.MAX_VALUE
BigInteger maxInt = BigInteger.valueOf(Integer.MAX_VALUE);
BigInteger value = new BigInteger("whatever");
if (value.compareTo(maxInt) > 0)
{
// larger
}
您可以從字符串構造一個BigInteger
對象,然后將該BigInteger
與Integer.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.