我正在使用两个BufferedReaders,一个用于读取文档,另一个用于获取要从用户搜索的String的输入,请注意建议here。这是迄今为止的代码:
import java.io.*;
import java.util.*;
public class Ejercicio6 {
public static void main(String[] args) {
Character answer = 'S';
boolean exit = false;
String name;
String line;
Scanner sc = new Scanner (System.in);
boolean found = false;
File file = new File ("/test/Ejercicio6/nombres.txt");
try {
do{
exit = false;
FileInputStream fis = new FileInputStream(file);
BufferedReader readFile = new BufferedReader(new FileReader(file));
BufferedReader userInput = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Search a name, I'll tell you if it's found:");
name = userInput.readLine();
while ((line = readFile.readLine()) != null && found == false){
if(line.equals(name)) {
found = true;
}else
found = false;
}
if (found == true)
System.out.println("I have found the name " +name+ " in the file " +file.getName());
if (found == false)
System.out.println("Can't find the name");
fis.getChannel().position(0);
fileRead = new BufferedReader(new InputStreamReader(fis));
System.out.println("Do you want to try again? (Y/N)");
answer = sc.nextLine().toUpperCase().charAt(0);
if (answer =='S'){
exit = false;
}else
exit = true;
fileRead.close();
}while (exit == false);
// }catch (FileNotFoundException e) {
// e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
}
}
文档上有3个名称,但无论输入是否匹配,我总是得到“找到的名称”打印。我试图弄清楚getChannel()和缓冲区清除是如何告诉here的,但我遇到了很多麻烦。我缺少什么?
答案 0 :(得分:2)
在打印匹配或不匹配的名称后,您需要再次将发现的标记设置为false。 只需添加
found = false;
前
fis.getChannel().position(0);
答案 1 :(得分:1)
if (line.equals(name)) {
found = true;
} else
found = false;
可以简单地说:
found = line.equals(name);
只需在循环
之前移动boolean found = false;
package com.company;
import java.io.*;
import java.util.Scanner;
public class Ejercicio6 {
public static void main(String[] args) {
Character answer;
boolean exit;
String name;
String line;
Scanner sc = new Scanner(System.in);
File file = new File("file.txt");
try {
do {
FileInputStream fis = new FileInputStream(file);
BufferedReader readFile = new BufferedReader(new FileReader(file));
BufferedReader userInput = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Search a name, I'll tell you if it's found:");
name = userInput.readLine();
boolean found = false;
while ((line = readFile.readLine()) != null && found == false) {
found = line.equals(name);
}
if (found == true)
System.out.println("I have found the name " + name + " in the file " + file.getName());
if (found == false)
System.out.println("Can't find the name");
fis.getChannel().position(0);
BufferedReader fileRead = new BufferedReader(new InputStreamReader(fis));
System.out.println("Do you want to try again? (Y/N)");
answer = sc.nextLine().toUpperCase().charAt(0);
exit = answer != 'S';
fileRead.close();
} while (exit == false);
// }catch (FileNotFoundException e) {
// e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}