我有一个代码,其中包含一个获取文本字段输入的按钮,然后查看.txt文件,以查看是否存在匹配项。唯一的问题是它是否贯穿每一行并检查该行是否匹配,这意味着 if 和 else 语句都会被触发。所以假设.txt文件有3行代表 1234 , 5423 , 8543 然后输入 1234 ,然后代码运行为if语句的假设,因为输入匹配,它应该是。但是它继续前进,所以它也触发了它不应该的else语句。
public static String input = "";
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
String input = jTextField1.getText();
File file =new File("file.txt");
Scanner in = null;
try {
in = new Scanner(file);
while(in.hasNext())
{
String line=in.nextLine();
if(line.contains(input)){
popUp1 pu1 = new popUp1();
pu1.setVisible(true);
} else {
popUp2 pu2 = new popUp2();
pu2.setVisible(true);
}
}
} catch (FileNotFoundException e) {
System.out.println("Error");
}
}
答案 0 :(得分:0)
你的做法是错误的。正如您所注意到的,如果文件中有不匹配输入的行,则"失败"治疗被触发。相反,您需要遍历整个文件,检查匹配的行,如果找到,则触发该行为,然后终止循环。只有当你完成文件并仍未找到匹配项时,才能触发"失败"行为:
`delete the item ${row.name}`
答案 1 :(得分:0)
如果文件包含值,则假设您需要popup1,否则需要popup2。
注意我忽略了pu1
和pu2
变量的范围问题以及我们在EDT中获得了文件IO的事实。
boolean doPopupOne = false;
while(in.hasNext())
{
String line=in.nextLine();
if(line.contains(input)){
doPopupOne = true;
break;
}
}
if (doPopupOne)
{
popUp1 pu1 = new popUp1();
pu1.setVisible(true);
}
else
{
popUp2 pu2 = new popUp2();
pu2.setVisible(true);
}
答案 2 :(得分:0)
我想我明白你想做什么:)。如果在.txt文件中找到,或者不是,则只显示一条消息。添加一个计数器,该计数器保留.txt文件中存在的次数。如果你想在找到第一场比赛时停止,只需插入一个休息时间;在if子句中,移动while子句之后的else,你可以检查计数器,如下所示:
erl
如果你对文件中出现的次数感兴趣,那么在while子句之后移动if与pu2的情况相同:
Scanner in = null;
int count = 0;
try {
in = new Scanner(file);
while(in.hasNext())
{
String line=in.nextLine();
if(line.contains(input)){
count++;
popUp1 pu1 = new popUp1();
pu1.setVisible(true);
break;
}
}
if (count == 0){
popUp2 pu2 = new popUp2();
pu2.setVisible(true);
}
} catch (FileNotFoundException e) {
System.out.println("Error");
}