I Am Not Getting the Result I Expect Using readLine() in Java

前端 未结 3 840
一向
一向 2021-01-05 21:20

I am using the code snippet below, however it\'s not working quite as I understand it should.

public static void main(String[] args) {
    BufferedReader         


        
相关标签:
3条回答
  • 2021-01-05 21:52

    No input is not the same as the end of the stream. You can usually simulate the end of the stream in a console by pressing Ctrl+D (AFAIK some systems use Ctrl+Z instead). But I guess this is not what you want so better test for empty strings additionally to null strings.

    0 讨论(0)
  • 2021-01-05 21:56

    From my understanding of this, readLine should return null the first time no input is entered other than a line termination, like '\r'.

    That is not correct. readLine will return null if the end of the stream is reached. That is, for example, if you are reading a file, and the file ends, or if you're reading from a socket and the socket closses.

    But if you're simply reading the console input, hitting the return key on your keyboard does not constitute an end of stream. It's simply a character that is returned (\n or \r\n depending on your OS).

    So, if you want to break on both the empty string and the end of line, you should do:

    while (line != null && !line.equals(""))
    

    Also, your current program should work as expected if you pipe some file directly into it, like so:

    java -cp . Echo < test.txt
    
    0 讨论(0)
  • 2021-01-05 22:07

    There's a nice apache commons lang library which has a good api for common :) actions. You could use statically import StringUtils and use its method isNotEmpty(String ) to get:

    while(isNotEmpty(line)) {
        System.out.println(line);
        line = br.readLine();
    }
    

    It might be useful someday:) There are also other useful classes in this lib.

    0 讨论(0)
提交回复
热议问题