用户按新行时必须退出while循环。但它不起作用,并且会不断更新换行

时间:2019-04-04 11:18:53

标签: java string file loops while-loop

我需要做以下练习: a)制作一个新的文本文件 b)将用户的输入放入该文本文件 c)我们必须在用户继续键入时保存所有用户的输入,但是一旦用户在新行中按Enter键(发送空字符串时),用户就必须退出程序。 为了编码此问题,我编写了以下代码,但是当 我自己尝试,所以我陷入了while循环,当我发送空字符串时无法退出。 那么有人可以为这个问题提供解决方案吗?

谢谢

我尝试了一些在youtube上找到的解决方案,例如在while循环内制作if语句或添加在循环条件内接受用户输入的代码。 因此,我不知道下一步该怎么做。 我试图通过Eclipse输出查看控制台窗口。


import java.io.*;
import java.util.Scanner;
public class lesson {
    public static void main(String[] args) throws IOException {

        File file = new File("mytext.txt");

        if (file.exists() == false) {
            file.createNewFile();
        }
        PrintWriter pw = new PrintWriter(file);
        System.out.println("Enter a text here: ");
        String str;
         while (true) {
             Scanner input = new Scanner(System.in);
            str = input.next();
            pw.println();
            if (str.equals(null)) {
                break;
            }
        } 
        pw.close();
        System.out.println("Done");
    } 
}

用户发送空字符串时,必须退出循环。并且必须完成对该文件的写入。

2 个答案:

答案 0 :(得分:1)

要实现这一点,我们检查输入的长度是否大于0:

import java.io.*;
import java.util.Scanner;
public class lesson {
    public static void main(String[] args) throws IOException {

        File file = new File("mytext.txt");

        if (file.exists() == false) {
            file.createNewFile();
        }
        PrintWriter pw = new PrintWriter(file);
        System.out.println("Enter a text here: ");
        String str;
        Scanner input = new Scanner(System.in);
        while ((str = input.nextLine()).length() > 0) {
             //str = input.next();
             pw.println(str);
        } 
        pw.close();
        System.out.println("Done");
    } 
}

答案 1 :(得分:1)

首先是代码,然后是说明...

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;

public class Lesson {
    public static void main(String[] args) {
        File file = new File("mytext.txt");
        try (Scanner input = new Scanner(System.in);
             PrintWriter pw = new PrintWriter(file)) {
            System.out.println("Enter a text here: ");
            String str = input.nextLine();
            while (str.length() > 0) {
                pw.println(str);
                pw.flush();
                str = input.nextLine();
            }
        }
        catch (IOException xIo) {
            xIo.printStackTrace();
        }
        System.out.println("Done");
    }
}

以上代码至少需要Java 7,因为它使用了try-with-resourcesScanner应该关闭,就像PrintWriter应该关闭一样。 资源尝试确保它们已关闭。请注意,如果文件 mytext.txt 不存在,则创建新的PrintWriter也会创建该文件;如果文件已存在,则其内容将被删除并替换为您输入。

在显示提示后,即在此处输入文本,然后用户输入一行文本。方法nextLine()将获取所有输入的文本,直到用户按下Enter键为止。我再次阅读了您的问题,并且当用户按下Enter键而没有输入任何文本时,程序应该退出。用户执行此操作时,str是一个空字符串,即长度为零。这意味着我需要在str循环之前为while分配一个值,因此是在nextLine()循环之前对方法while的第一次调用。

while循环中,我将用户输入的值写入文件 mytext.txt 中,然后等待用户输入另一行文本。如果用户按Enter键而不输入任何文本,则str的长度为零,并且while循环将退出。

使用Eclipse for Windows Developers版本2019-03在Windows 10上使用JDK 12编写和测试。