正则表达式:int无法解除引用

时间:2013-08-16 16:28:52

标签: java regex

我编写了一些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 not dereferenced”

我也尝试过:

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

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

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

如何将写入Regex的Java代码仅检查数值的整数值?

findrow声明为:

findrow = rs.getRow();

ID声明为:

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

4 个答案:

答案 0 :(得分:3)

我强烈怀疑ID被声明为int[],这意味着ID[findrow]int - 因此您无法呼叫matches或{ {1}}就可以了。这肯定会给完全您在JDK 7中指定的错误消息:

toString

错误讯息:

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");
}

答案 1 :(得分:3)

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

好的,既然我们知道ID是一个i​​nt [],我想我们需要解决这里的基本误解。 ID的元素具有类型int,它是数字。它不是“一串文字字符应该看起来像一个数字”,或类似的东西。老实说,这是一个数字(确切地说,是-2147483648到2147483647范围内的整数),并且没有任何字符。所以通过确保字符都是数字来“验证”它实际上没有意义,因为实际上没有任何字符。