我想在点击按钮加载数据时检查txt文件是否包含重复数据。
例如ID,ID中的ID
0001
技术
0003
这是部分代码
while (scnr.hasNextInt())
{
id = scnr.nextInt();
int checkid = id;
if(checkid == id) {
System.out.println("invalid id");
} else{
clients.put(new Integer(id), new Client(id));
}
}
此代码不起作用
而且,我尝试过这种方法,但它也没有用。
if(checkid.matches(id))
{
System.out.println("invalid id");
}
无法在基本类型int
上调用matches(int)
我不明白为什么String类型数据可以使用.matches()但是int不能 我可以植入什么方法来验证int类型数据????
答案 0 :(得分:3)
首先,你应该理解int
不是一个类而是Java中的primitive type,你不能在它上面调用一个方法。
其次,您希望找到重复的元素,因此您应该尝试Set
。
最后,如果您不熟悉编程语言,可以尝试 Head First Java ;否则,您可能希望查看 Thinking In Java
答案 1 :(得分:0)
这是一个适合你的例子。使用HashSet存储id并检查Set是否包含id。
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
public class SetExample {
public static void main(String[] args) {
Scanner scnr = new Scanner(System.in);
Set<Integer> ids = new HashSet<>();
int id;
while (scnr.hasNextInt()) {
id = scnr.nextInt();
if (ids.contains(id)) {
System.out.println("invalid id");
} else {
ids.add(id);
clients.put(new Integer(id), new Client(id));
}
}
}
}
答案 2 :(得分:-1)
您的代码无法正常工作的原因非常明显:您将checkid
设置为id
,然后检查它们是否相等。如果要根据以前的ID检查每个新ID,则需要跟踪已读取的ID,例如: G。使用前面提到的List
或Set
。
theese线上的东西会做:
List<Integer> ids = new ArrayList<>();
while (scnr.hasNextInt()) {
id = scnr.nextInt();
if (ids.contains(id)) {
System.out.println("invalid id");
} else {
ids.add(id);
clients.put(new Integer(id), new Client(id));
}
}
我不明白为什么String类型数据可以使用.matches()但int不能。
String
是complex datatype,int
是primitive datatype,不支持方法。无论如何,.matches()
不会做这项工作,因为它与regular expression进行比较。 .equals
会是更好的选择,但同样不是int
。