使用Java和readLine()回车和换行

时间:2011-01-21 11:58:47

标签: java

我使用以下代码建立HTTP连接并读取数据:

con = (HttpURLConnection) new URL("http://stream.twitter.com/1/statuses/sample.json").openConnection();
...
con.connect();
while (line = rd.readLine()) {
    if (line.contains("\r\n")) {
      System.out.println("Carriage return + new line");
    }
} 

但是,似乎“\ r \ n”不是字符串(line)的一部分,尽管服务器确实返回它们。如何读取数据并检测“\ r \ n”?

谢谢,

乔尔

3 个答案:

答案 0 :(得分:33)

如果rd类型为BufferedReader,则无法确定readLine()是否返回以\n\r或{{1}结尾的内容... ...行尾字符被丢弃,而不是返回字符串的一部分。

如果您真的关心这些角色,则无法通过\r\n。例如,你必须通过read()逐个阅读这些字符。

答案 1 :(得分:10)

来自javadocs

public String readLine() throws IOException
  

阅读一行文字。一条线被认为是由换行符('\ n'),回车符('\ r')或回车后的任何一个终止,后面是换行符。
  返回:
  包含行内容的字符串,不包括任何行终止字符,如果已到达流的末尾,则为null   抛出:
  IOException - 如果发生I / O错误

答案 2 :(得分:0)

在Java中, readLine() 使用\n\r作为换行符和回车符来确定下一行。因此,当您使用readLine()时,将不会在控制台中显示\n\r字符,因为这些字符将被readLine()屏蔽。有关readLine()的更多信息,请参考官方Oracle doc

为避免此类行为,我们应该使用read()包中的 BufferedReader 方法。以下示例代码片段将帮助您了解如何使用\n来识别这些\rread()

假设您有一个名为 test_lineFeed.txt 的文件,其中包含换行符,如果您想将其替换为某些定义的格式,例如“ CR-LF”(CR->回车, LF->换行),然后使用以下代码段。

BufferedReader reader1 = new BufferedReader(
                new InputStreamReader(
                        new FileInputStream("/home/test_lineFeed.txt")
            ));

    int s1 = 0;
    String formattedString = "";
    while ((s1 = reader1.read()) != -1) {

        char character = (char) s1;

        System.out.println("Each Character: "+character+" its hexacode(Ascii): "+Integer.toHexString(character));
        //output : "0a" --> \n 
        //output : "0d" --> \r

        if (character == '\n'){
            formattedString+=" <LF> ";
        }else if (character =='\r'){
            formattedString+=" <CR> ";
        }else
            formattedString+=character;

    }
    System.out.println(formattedString);