Java 验证字符串是否为整数?

Java 验证字符串是否为整数?,java,Java,不热衷于使用parseInteger解决方案,这很难看,正如Joshua Bloch所说的,您应该“仅在异常情况下使用异常”。当然,我可以使用下面的代码块,但不能保证它是整数 for (char c : str.toCharArray()) { if (!Character.isDigit(c)) return false; } return true; “仅在特殊情况下使用异常”是一个可以普遍遵循的良好实践,但这不是一个硬性规定。我认为这是使用异常优于替代方案的情况之一 由于pars

不热衷于使用
parseInteger
解决方案,这很难看,正如Joshua Bloch所说的,您应该“仅在异常情况下使用异常”。当然,我可以使用下面的代码块,但不能保证它是整数

for (char c : str.toCharArray())
{
    if (!Character.isDigit(c)) return false;
}
return true;
“仅在特殊情况下使用异常”是一个可以普遍遵循的良好实践,但这不是一个硬性规定。我认为这是使用异常优于替代方案的情况之一

由于
parseInteger()
可以返回任何可能的
int
值,因此不能使用任何其他返回值来指示失败。如果知道永远不会处理特定值(例如
-1
-2147483648
),可以将其作为哨兵值返回以指示解析失败

唯一的替代方法是返回表示成功或失败的
布尔值
,并将解析后的值存储到参数中。但是,由于函数调用在Java中始终是按值传递的,因此需要创建一个新类来执行此操作:

public class IntWrapper
{
    int value;
}
...

public static boolean myParseInt(String s, IntWrapper outValue)
{
    try
    {
        outValue.value = Integer.parseInt(s);
        return true;
    }
    catch(NumberFormatException e)
    {
        return false;
    }
}
...

IntWrapper value = new IntWrapper();
if (myParseInt(value))
{
    // Use value.value
}
else
{
    // Parsing failed
}

考虑到这些备选方案,我认为最简单的用法就是使用异常并适当地处理它们,即使非数字输入可能不是一个“异常”条件。

我会将其保留为异常,但如果您确实希望解决方案无异常,您可以复制方法parseInt()使用java内部类从站点开始,并对其进行一点更改

(由于不需要结果,您可以再修改一点)

public static false isValidInt(字符串s,整数基数)
抛出NumberFormatException
{
如果(s==null){
返回false;
}
if(基数<字符最小基数){
返回false;
}
if(基数>字符最大基数){
返回false;
}
int结果=0;
布尔负=假;
int i=0,len=s.length();
int limit=-Integer.MAX_值;
int multmin;
整数位数;
如果(len>0){
char firstChar=s.charAt(0);
if(firstChar<'0'){//可能的前导“-”
if(firstChar=='-'){
负=真;
限制=整数.MIN_值;
}否则
返回false;
if(len==1)//不能有一个“-”
返回false;
i++;
}
multmin=极限/基数;
而(我
您可以使用:

public static boolean isInteger(String str) {
    if (str == null) {
        return false;
    }
    int length = str.length();
    if (length == 0) {
        return false;
    }
int i = 0;
if (str.charAt(0) == '-') {
    if (length == 1) {
        return false;
    }
    i = 1;
}
for (; i < length; i++) {
    char c = str.charAt(i);
    if (c <= '/' || c >= ':') {
        return false;
    }
}
return true;
}
publicstaticbooleaninteger(stringstr){
如果(str==null){
返回false;
}
int length=str.length();
如果(长度==0){
返回false;
}
int i=0;
如果(str.charAt(0)='-'){
如果(长度==1){
返回false;
}
i=1;
}
对于(;i

这里已经回答了:

但它不能保证它是一个整数。你能解释一下为什么吗?如果字符串仅为数字,则应将错误输入视为异常情况,我认为
Integer
,如32位整数,或整数,如可以用
biginger
表示的任意整数?您可以重写
parseInt()
方法以返回
false
,而不是引发异常。这个方法很容易阅读。这对您来说是更好的解决方案吗?您所建议的或多或少是
parseInteger
所做的。只需查看源代码并进行调整。
public static boolean isInteger(String str) {
    if (str == null) {
        return false;
    }
    int length = str.length();
    if (length == 0) {
        return false;
    }
int i = 0;
if (str.charAt(0) == '-') {
    if (length == 1) {
        return false;
    }
    i = 1;
}
for (; i < length; i++) {
    char c = str.charAt(i);
    if (c <= '/' || c >= ':') {
        return false;
    }
}
return true;
}