如何让用户在没有文本输入的情况下输入字符串直到输入数组?

时间:2013-09-28 00:14:36

标签: java while-loop bufferedreader

我真的希望有人可以帮助我。我还是Java的新手,我花了好几个小时试图弄清楚如何做到这一点。我有一个循环来提示用户输入文本(字符串)到一个arraylist然而,我无法弄清楚如何结束循环并显示他们的输入(我希望这发生在他们按下'输入'时带有空白文本字段。这就是我所拥有的 - 提前谢谢!!

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class Ex01 {

    public static void main(String[] args) throws IOException {

        BufferedReader userInput = new BufferedReader(new InputStreamReader(
            System.in));

        ArrayList<String> myArr = new ArrayList<String>();

        myArr.add("Zero");
        myArr.add("One");
        myArr.add("Two");
        myArr.add("Three");

        do {
            System.out.println("Enter a line of text to add to the array: ");

            String textLine = userInput.readLine();
            myArr.add(textLine);
        } while (userInput != null);

        for (int x = 0; x < myArr.size(); ++x)
            System.out.println("position " + x + " contains the text: "
                    + myArr.get(x));
    }
}

2 个答案:

答案 0 :(得分:2)

null变量和空字符串之间存在差异。 null变量是一个不引用任何内容的变量。空字符串是长度为0的字符串,位于内存中的某个位置,这些变量可以引用。

如果到达流的末尾,

readLine仅返回null(请参阅the docs)。对于标准输入,这不会在程序运行时发生。

更重要的是,您要检查BufferedReader是否为null,而不是它所读取的字符串(这种情况永远不会发生)。

更改代码的问题只是检查字符串是否为空而不是它仍将被添加到ArrayList(在这种情况下这不是特别重要的事情 - 它可以只是被删除,但在其他情况下,字符串将被处理,在这种情况下,如果它是空的将是一个问题。)

有一些解决办法:

他们黑客攻击,然后删除最后一个元素:

// declare string here so it's accessible in the while loop condition
String textLine = null;
do
{
    System.out.println("Enter a line of text to add to the array: ");
    textLine = userInput.readLine();
    myArr.add(textLine);
}
while (!textLine.isEmpty());
myArr.remove(myArr.size()-1);

while-while-while-loop-condition方式:

String textLine = null;
System.out.println("Enter a line of text to add to the array: ");
while (!(textLine = userInput.readLine()).isEmpty())
    myArr.add(textLine);
    System.out.println("Enter a line of text to add to the array: ");
} ;

两次做法:

System.out.println("Enter a line of text to add to the array: ");
String textLine = userInput.readLine();
while (!textLine.isEmpty())
    myArr.add(textLine);
    System.out.println("Enter a line of text to add to the array: ");
    textLine = userInput.readLine();
};

一切都是中间的(一般不建议 - 通常首选避免break):

String textLine = null;
do
{
    System.out.println("Enter a line of text to add to the array: ");
    textLine = userInput.readLine();
    if (!textLine.isEmpty())
        break;
    myArr.add(textLine);
}
while (true);

答案 1 :(得分:0)

while (!textLine.isEmpty())

userInput永远不会是null