0

我编写了一些 Java 代码来从数据库中检索行并检查它们是否有错误:

    boolean checkID = ID[findrow].matches("[0-9]+");

    if(checkID==true)
    {   System.out.println("ID is valid");
    }   else
    {   System.out.println("ID is invalid");
    }

但显示错误“无法取消引用 int”

我也试过:

    boolean checkID = ID[findrow].toString().matches("[0-9]+");

    if(checkID==true)
    {   System.out.println("ID is valid");
    }   else
    {   System.out.println("ID is invalid");
    }

因为我知道正则表达式可能不会检查整数值,但同样的错误显示..

Java 代码如何编写到 Regex 仅检查数值的整数值?

findrow 声明为:

findrow = rs.getRow();

ID 声明为:

final int[] ID = new int[500];
ID[findrow] = rs.getInt(1);
4

4 回答 4

3

我强烈怀疑它ID被声明为,int[]这意味着它ID[findrow]是一个int- 所以你不能调用它。这肯定给出了您在 JDK 7 中指定的错误消息matchestoString

int[] array = new int[1];
String text = array[0].toString();

错误信息:

Test.java:8: error: int cannot be dereferenced
        String text = array[0].toString();

但如果是这样的话,你知道你有一个int反正,所以检查它是否只包含数字是没有意义的。(您可以检查它是否为非负数。)

我怀疑您对您在这里获得的数据类型以及您要检查它的内容感到有些困惑。

作为几个风格点,与boolean常量比较通常是不受欢迎的,而且你的支撑风格至少是非传统的。我会把你的if陈述写成:

if (checkID) {
    System.out.println("ID is valid");
} else {
    System.out.println("ID is invalid");
}

...或者只使用条件表达式:

System.out.println("ID is " + (checkID ? "valid" : "invalid"));
于 2013-08-16T16:31:38.593 回答
3

ID[findrow]可能是int您无法调用该方法的toString()方法。

因此尝试:boolean checkID = Integer.toString(ID[findrow]).matches("[0-9]+");

于 2013-08-16T16:33:00.433 回答
0

最可能的原因是ID[findrow]返回一个int类型值,这意味着调用没有意义.matches(),因为.运算符的意思是“取消引用”,而ints 是无法取消引用的原始类型。

于 2013-08-16T16:31:58.413 回答
0

好的,既然我们知道 ID 是一个 int[],我认为我们需要解决这里的基本误解。ID 的元素有类型int,它是一个数字。它不是“一串应该看起来像数字的文本字符”或类似的东西。老实说,它是一个数字(准确地说,是一个介于 -2147483648 到 2147483647 之间的整数),并且其中没有任何字符。因此,通过确保字符都是数字来“验证”它实际上是没有意义的,因为实际上并没有任何字符。

于 2013-08-16T17:13:49.400 回答