我真的希望有人可以帮助我。我还是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));
}
}
答案 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
!