0

下面的代码大部分是不言自明的。但是,我在两种情况下遇到了麻烦:

  1. while即使命令行留空,循环也不会退出。

  2. 如果输入是test t1变量key应该是“测试”(使用System.out.println(key))这样做,但是由于某种原因它仍然没有进入if条件。

    String[] broken_text = null; String text = "";
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    while((text = reader.readLine()) != null) {     
      broken_text =    text.split(" ");
      String first_key = broken_text[0];    
      if (first_key == "test") {
            //some statements    
       }
    }
    

我不知道为什么会这样,任何有关相同的帮助将不胜感激。

4

4 回答 4

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()) 
于 2012-11-05T23:43:07.777 回答
1

循环不会结束,因为空行会导致readLine()返回空字符串,而不是null.

比较失败,因为字符串必须与equals()not进行比较==

于 2012-11-05T23:44:38.677 回答
1

在这种情况下String text永远不会null。您可以使用:

while (!(text = reader.readLine()).isEmpty()) {
于 2012-11-05T23:45:33.207 回答
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"。)

于 2012-11-06T05:12:13.673 回答