使用readline()和split()

时间:2012-11-05 23:41:14

标签: java split bufferedreader readline

以下代码主要是自我解释。但是,在两种情况下我遇到了麻烦:

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

  2. 如果输入为test t1,则key变量应该是“test”(使用System.out.println(key)),但是,它仍然没有输入{由于某种原因{1}}条件。

    if
  3. 我不确定为什么会发生这种情况,对此有任何帮助将不胜感激。

4 个答案:

答案 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”。)