Java 使用If语句执行

Java 使用If语句执行,java,Java,我的IF状况有一个小问题。此方法读取用户输入并扫描文本文件以查找输入的文本。这很有效。如果找不到输入,我想执行Writer方法。这就是我的问题所在。我似乎无法返回找到的行并退出程序。相反,我返回一个找到的行,然后调用writer方法,这不是我想要做的 public static void parseFile(String s) throws FileNotFoundException { File file = new File("data.txt"); Scanner

我的IF状况有一个小问题。此方法读取用户输入并扫描文本文件以查找输入的文本。这很有效。如果找不到输入,我想执行Writer方法。这就是我的问题所在。我似乎无法返回找到的行并退出程序。相反,我返回一个找到的行,然后调用writer方法,这不是我想要做的

   public static void parseFile(String s) throws FileNotFoundException {
    File file = new File("data.txt");

    Scanner scanner = new Scanner(file);
    while (scanner.hasNextLine()) {
        final String lineFromFile = scanner.nextLine();
        if (lineFromFile.contains(s)) {
            // a match!
            System.out.println(lineFromFile);
        }
       else{
          Writer();
       }
    }       
}
这是我的写作方法

    public static void Writer() {
    Scanner Keyboard = new Scanner(System.in);
    Scanner input = new Scanner(System.in);

    File file = new File("data.txt");
    try (BufferedWriter wr = new BufferedWriter(new FileWriter(
            file.getAbsoluteFile(), true))) { // Creates a writer object
                                                // called wr
                                                // file.getabsolutefile
                                                // takes the filename and
                                                // keeps on storing the old
        System.out
                .println("I cannot find this line... Enter new line"); // data
        while ((Keyboard.hasNext())) {

            String lines = Keyboard.nextLine();
            System.out.print(" is this correct ? ");
            String go = input.nextLine();

            if (go.equals("no")) {
                System.out.println("enter line again");
                lines = Keyboard.nextLine();
                System.out.print(" is this correct ? ");
                go = input.nextLine();
            }

            if (go.equals("yes")) {
                wr.write(lines);
                wr.write("\n");

                wr.newLine();

                wr.close();
            }

            System.out.println("Thankk you");
            break;
        }
    } catch (IOException e) {
        System.out.println(" cannot write to file " + file.toString());
    }
}

使用标志来标识是否找到输入
s
,请尝试这种方式

   public static void parseFile(String s) throws FileNotFoundException {
    File file = new File("data.txt");

    Scanner scanner = new Scanner(file);
    int flag_found=0;
    while (scanner.hasNextLine()) {
        final String lineFromFile = scanner.nextLine();
        if (lineFromFile.contains(s)) {
            // a match!
            System.out.println(lineFromFile);
            flag_found = 1;//Input is found
        }
    }

    if(flag_found==0){// input is not found in the txt file so flag_found remains 0
      Writer();
    }       
}

我会重新安排你的计划,这样

  • 另一个最常用的方法是读取用户输入
  • 只为任何输入创建一个扫描仪,例如System.in,Every,如果不这样做,您会感到困惑。e、 g.使其成为
    静态最终版
    全局版。这通常是一个错误的选择,但在您的情况下,您正在包装一个全局字段
  • 这个最外层的函数有一个循环,它会一直执行一个动作,直到需要停止为止。您可以设置标志或使用
    break
    返回以中断循环
  • 另外,请确保只打开一次文件。我也会用最外层的方法来做
  • 你分解了你的程序,所以你有一种方法来读取一个文件,从中找到你需要的,还有另一种方法来处理第二个文件,等等

程序调用
Writer
-方法的原因是,循环将继续执行,直到文本文件结束。您可以使用
break
退出
while
-循环:

public static void parseFile(String s) throws FileNotFoundException {
    File file = new File("data.txt");

    Scanner scanner = new Scanner(file);
    while (scanner.hasNextLine()) {
        final String lineFromFile = scanner.nextLine();
        if (lineFromFile.contains(s)) {
            // a match!
            System.out.println(lineFromFile);
            break; // <--- break out of the loop when a match is found.
        }
        else
        {
            Writer();
        }
    }       
}
publicstaticvoidparsefile(字符串s)抛出FileNotFoundException{
File File=新文件(“data.txt”);
扫描仪=新扫描仪(文件);
while(scanner.hasNextLine()){
最后一个字符串lineFromFile=scanner.nextLine();
如果(lineFromFile.contains)){
//比赛!
System.out.println(lineFromFile);

break;//似乎可以将该方法编写为:

public static String parseFile(String s) throws FileNotFoundException {
    File file = new File("data.txt");
    boolean inputFound = false;
    Scanner scanner = new Scanner(file);
    String lineFromFile;
    while (scanner.hasNextLine()) {
        lineFromFile = scanner.nextLine();
        if (lineFromFile.contains(s)) {
            // a match!
            inputFound = true;
            break;
        }
    }       
    if(!inputFound) {
       writer(); //camel case should be used.
       return ""; //empty string
    } else {
        return lineFromFile;
    }
}

在旁注中,方法名称应该是驼峰大小写。另外,您不需要每次在循环中创建新字符串
lineFromFile

请更正您的描述,您正在为if和else编写find line,我想,其中一个不应该被找到。我建议使用s和linefrom file进行一些println。您能给我们一个输出吗第一个if语句中的s和linefromfile的t为什么要在Writer函数中再次读取键盘输入?您的描述非常混乱。首先,您说如果文件缺少一行,您想在文件中写入一行,然后您说要返回找到的行并退出程序,然后您说不想返回找到的行并调用writer方法。你到底想做什么?一个离题风格的建议:在Java中,方法的名称以小写字母开头,所以
writer()
。如果你想区分静态方法调用,请使用类名,
ClassName.writer();
。当有一个几乎通用的约定时(对于Java符号名,有),如果你遵循它,生活会变得容易得多。