使用BufferedReaders循环搜索字符串?

时间:2015-09-18 08:10:20

标签: java bufferedreader filereader

我正在使用两个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的,但我遇到了很多麻烦。我缺少什么?

2 个答案:

答案 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();
        }
    }
}
相关问题