以下代码主要是自我解释。但是,在两种情况下我遇到了麻烦:
即使命令行留空,while
循环也不会退出。
如果输入为test t1
,则key
变量应该是“test”(使用System.out.println(key)
),但是,它仍然没有输入{由于某种原因{1}}条件。
if
我不确定为什么会发生这种情况,对此有任何帮助将不胜感激。
答案 0 :(得分:3)
使用equals()来检查字符串相等性。
if (first_key == "test") {
//some statements
}
should be
if (first_key.equals("test")) {
//some statements
}
您的text
永远不会是null
,因为您将其声明为
String text = "";
因此你的while循环将是一个无限循环
更改
String text = "";
to
String text = null;
或者如果您想将text=""
字符串留空字符串。
使用
while(!(text = reader.readLine()).isEmpty())
答案 1 :(得分:1)
循环不会结束,因为空行会导致readLine()
返回空字符串,而不是null
。
比较失败,因为字符串必须与equals()
而非==
答案 2 :(得分:1)
在这种情况下,String
text
永远不会是null
。您可以使用:
while (!(text = reader.readLine()).isEmpty()) {
答案 3 :(得分:0)
这应该是您编辑的代码:
String[] broken_text = null;
String text = "";
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
while((text = reader.readLine()) != null && !text.isEmpty()) {
broken_text = text.split(" ");
String first_key = broken_text[0];
if ( "test".equals(first_key)) {
//some statements
}
}
将(text = reader.readLine()) != null
更改为(text = reader.readLine()) != null && !text.isEmpty()
的原因是因为readLine()
在遇到作为第一个字符的文件结尾时返回null
,并返回“”(空字符串)遇到第一个字符时是\r
(回车),\n
(换行)或\r\n
(回车后跟换行)。在检查null
之前,您必须始终检查isEmpty()
。
在 unix / Linux 控制台上,文件结尾为[ctrl][d]
,在 DOS 上为[ctrl][z]
注意:如果你想从文件中读取输入(你更有可能获得文件结尾)而不是控制台,那么你的reader
将被初始化为:
BufferedReader reader = new BufferedReader(new FileReader("d:\\a1.txt"));
(假设您的输入数据位于文件中:“d:\ a1.txt”。)