前言
本类所有方法均已加入cntool
,可以选择使用本类方法也可以选择使用cntool
以maven坐标方式调用,cntool
介绍👉cntool介绍
实现思路
在Java中,在使用Integer.parseInt(value)
将字符串转为Integer类型时,如果没转成功,程序会出现异常,我们利用这个原理,可以将出现异常的归类为不是整数,未出现异常的归类为整数
代码
/**
* 判断字符串是否是整数
*/
public static boolean isInteger(String value) {
try {
Integer.parseInt(value);
return true;
} catch (NumberFormatException e) {
return false;
}
}
问题
使用这个方法,当整数值为2147483647
程序正常返回true,但是一旦值大于2147483647
返回的就会是false
2147483647时
//例
public static void main(String[] args) {
String str = "2147483647";
System.out.println(isInteger(str));
}
/**
* 判断字符串是否是整数
*/
private static boolean isInteger(String value) {
try {
Integer.parseInt(value);
return true;
} catch (NumberFormatException e) {
return false;
}
}
运行后返回结果
>2147483647时
//例
public static void main(String[] args) {
String str = "2147483648";
System.out.println(isInteger(str));
}
/**
* 判断字符串是否是整数
*/
private static boolean isInteger(String value) {
try {
Integer.parseInt(value);
return true;
} catch (NumberFormatException e) {
return false;
}
}
运行后返回结果
问题原因
在Java中,Integer类取值和 int 类型取值一致,取值范围是从-2147483648 至 2147483647(-231至 231-1) ,包括-2147483648 和 2147483647。实例中2147483648
超过了取值范围,所以产生了数字转换异常,异常如下
java.lang.NumberFormatException: For input string: "2147483648"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:587)
at java.lang.Integer.parseInt(Integer.java:615)
at com.example.demo.OneDemo.isInteger(OneDemo.java:23)
at com.example.demo.OneDemo.main(OneDemo.java:14)
解决思路
换用long类型进行判断,long数据类型是64位、有符号的以二进制补码表示的整数;占8字节,最小值是-9,223,372,036,854,775,808(-2^63)
最大值是9,223,372,036,854,775,807(2^63 -1)
/**
* 判断字符串是否是long类型
*/
public static boolean isLong(String value) {
try {
Long.valueOf(value);
return true;
} catch (NumberFormatException e) {
return false;
}
}
使用以上代码即可解决~