Java 从文本 (txt) 文件中读取字符串

Java reading a string from a text(txt) file

Rod
Rae
Bryan
Shiroe
Ric
Kirito
Asuna
Elsa
Akutabe
Shino

我将该列表保存在文本文件中。如果我要输入 Rod,它应该说 "Exists" 如果我输入一个不在列表中的名字,它应该说 "Does not exist." 但是我的代码发生的事情是它读取文件 每行 并打印 "Does not exist" 如果它与字符串行不匹配。 因此,如果我输入一个 txt 文件中不存在的名称,它将打印 10 "Does not exist" 行。

下面是我的代码:

Scanner in = new Scanner(System.in);
    out.print("Enter name: ");
    String name = in.nextLine();

    BufferedReader br = new BufferedReader(new FileReader("name.txt"));
    String line;
    while ((line = br.readLine()) != null) {
        if (line.contains(name)) {
            out.println("Exists");
            break;
        } else {
            out.println("Does not exist");
        }
    }
    br.close();

输出的示例是:

姓名=桐人

Does not exist
Does not exist
Does not exist
Does not exist
Exists

为什么我的程序在找到完全匹配之前打印了这么多 Does not exist

使用boolean来记住你是否找到了匹配项,并且只有在检查了每一项之后并且只有当你没有找到匹配项时才显示"Does not exist"。

如果名称存在,您正在 break 循环,所以如果循环 没有 中断,您应该只打印 "not exists" 消息:

Scanner in = new Scanner(System.in);
out.print("Enter name: ");
String name = in.nextLine();

BufferedReader br = new BufferedReader(new FileReader("name.txt"));
String line;
boolean nameFound = false;
while ((line = br.readLine()) != null) {
    if (line.contains(name)) {
        out.println("Exists");
        nameFound = true;
        break;
}
if (!nameFound) {
    out.println("Does not exist");
}
br.close();

你快到了。您只是在抢先打印错误消息。我也会使用 equals 而不是 contains 并将整个文件预加载到其中。 HashSet 如果需要回答多个查询

Scanner in = new Scanner(System.in);
out.print("Enter name: ");
String name = in.nextLine();

BufferedReader br = new BufferedReader(new FileReader("name.txt"));
String line;
boolean found = false;
while ((line = br.readLine()) != null) {
    if (line.contains(name)) {
        out.println("Exists");
        found = true;
        break;
    }
}
if (!found) {
             out.println("Does not exist");
}
br.close();
    PrintStream out = System.out;
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    out.print("Enter name: ");
    String name = in.readLine();

    BufferedReader br = new BufferedReader(new FileReader("name.txt"));
    String line;
    boolean ifexist = false;
    while ((line = br.readLine()) != null) {
        if (line.contains(name)) {
            ifexist = true;
            break;
        }
    }
    if (ifexist) {
        out.print("Exist");
    } else {
        out.println("Does not exist");
    }
    br.close();

添加一个布尔变量默认为false,存在时将其设置为true并中断。比输出。