我编写了一些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);
答案 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是一个int [],我想我们需要解决这里的基本误解。 ID的元素具有类型int
,它是数字。它不是“一串文字字符应该看起来像一个数字”,或类似的东西。老实说,这是一个数字(确切地说,是-2147483648到2147483647范围内的整数),并且没有任何字符。所以通过确保字符都是数字来“验证”它实际上没有意义,因为实际上没有任何字符。