我使用以下代码建立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”?
谢谢,
乔尔
答案 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
来识别这些\r
和read()
。
假设您有一个名为 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);