3

我想制作一个命令行,只是为了运行基本命令。到目前为止,我已经做到了,以便人们可以告诉程序他们的名字。但是,当我不输入名称时,它会将其视为我输入了。这是我的课:

public static void main(String args[])
        throws IOException
{
    int a = 1;

    do
    {
        System.out.print("$$: ");
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String wtt = null; // wtt = what they typed!
        wtt = br.readLine();

        if(wtt == null)
        {
            System.out.println("Why wont you tell me your name!");
        }
        else
        {

            System.out.println("Thanks for the name, " + wtt);
        }

    }
    while(a == 1);
}

这是输出

$$: 好吧

谢谢你的名字,嗯

$$: 洞

谢谢你的名字,洞

$$:

谢谢你的名字,

为什么它不起作用?

4

7 回答 7

7

调用readLine()aBufferedReader只会null在输入结束时返回。在这里,输入还没有结束,你刚刚输入了一个空行,所以""(空字符串)就是结果。

您将需要结束输入流,通常使用 Ctrl-C。然后你会得到"Why wont you tell me your name!". 但是你需要打破你的无限循环。

于 2013-08-19T21:56:31.230 回答
3

用这个

if (wtt == null || wtt.trim().length() == 0) 
于 2013-08-19T21:58:47.727 回答
2

尝试

wtt.length()==0 

而不是检查 null

于 2013-08-19T21:57:35.290 回答
2

这是因为尽管您null首先将字符串设置为,然后将其设置为br.readLine()即使用户在按 Enter 之前没有键入任何内容,也会有一行要读取,因此它将字符串设置为空字符串。

您还应该(或相反)将您的字符串与""(一个空字符串)进行比较,以查看他们是否输入了任何内容。

于 2013-08-19T21:58:20.400 回答
1

您也应该比较wtt""确保该行不为空。

if (wtt == null) {

变成

if (wtt == null && !!("".equals(wtt))) {

于 2013-08-19T21:59:12.573 回答
1

与其将 wtt 与 null 进行比较,不如将其与空字符串进行比较:

if ("".equals(wtt))
{
    System.out.....
}
于 2013-08-19T22:04:25.380 回答
1

readLine方法不会为您提供行尾字符(例如 \n、\r)。因此,当您按 Enter 键而不输入任何内容时,您不能期望循环退出。您可以使用read方法来读取字符并确定是否有换行符或使用Scanner类,这在我看来更适合您的情况。

于 2013-08-19T22:06:41.893 回答