2013-05-10 191 views
0

使用java我如何阅读每行具有分隔符CRLF(\ r \ n)的段落。 例如如何使用java读取每行具有CRLF( r n)作为分隔符的行集合

4 \ r \ n 这\ r \ n 8 \ r \ n 响应\ r \ n

我想提取4并将其存储到缓冲器中,然后读出8和存储为这一段。 请帮帮我。

+0

该文件从哪里来?为什么每个单词都以其长度开头? – jlordo 2013-05-10 07:20:58

+0

我不确定我是否理解这个问题,你是否想要阅读'4','这个','8','回应',还是作为jlordo说数字是后面的单词的长度?只要你坚持一个特定的分隔符,我就看不到任何需要这种用例的用例。 – nvrs 2013-05-10 07:27:08

+0

我想在分块传输编码的情况下读取http响应。每个块都带有大小和块数据。所以我只需要大小,每个块都有分隔符\ r \ n。在这种情况下,我需要它。 – user2365917 2013-05-10 08:02:09

回答

0

我不太清楚你必须做什么,但如果你必须从你的文本中获得字符串,你可以通过遵循我的解决方案。

这可能不是最好的方法,但它使用StringTokenizer\r\n作为分隔符。

StringTokenizer st1 = new StringTokenizer("4\r\n This\r\n 8\r\n response\r\n", "\r\n"); 

//iterate through tokens 
while (st1.hasMoreTokens()) { 
    String str = st1.nextToken(); 
    System.out.println(str);   
} 

这将打印

响应

此,当然,是有用如果您不是从文件中读取数据,而是刚收到完整字符串,则需要从中提取数据。

如果您正在阅读文件,您应该检查其他答案为BufferedReader.readLine是正确的方法。

编辑:

这里的新代码:

StringTokenizer st1 = new StringTokenizer("4\r\n This\r\n 8\r\n response\r\n", "\r\n"); 

//iterate through tokens 
while (st1.hasMoreTokens()) { 
    String str = st1.nextToken(); 
    try{ 
     //Integer.parseInt throws an exception in the input String doesn't represent a number so we catch the exception and we simply skip it. This will just output each number in your string. 
     int i = Integer.parseInt(str.trim()); 
     System.out.println(i); 
    } catch (NumberFormatException e){}    
} 

现在它只是。OUPUTS:

+0

谢谢。但我想在我的输出4中跳过\ r \ n并跳过“this”,再次我想要8.我该如何做这个? – user2365917 2013-05-10 08:32:34

+0

我已经更改了代码。 – StepTNT 2013-05-10 08:41:58

+0

非常感谢你。我会尝试这个。 – user2365917 2013-05-10 08:59:59

0

使用BufferedReader.readLine()只读行,或Scanner如果你想自动解析数字。

0

我不太清楚你需要什么输出,但BufferedReader类将允许你逐行读取文本文件。有几个例子on the internet

readLine方法将执行以下操作:

读取一行文本。换行符被换行符('\ n'),回车符('\ r')或回车符后面的换行符中的任何一个结束。

+0

我想用while循环读取上面例子4和8中的数字,while(line!= null)我想读直到\ r \ n所以我第一次读到“4 \ r \ n”和那么我想只将4存储到ByteArrayOutPutBuffer中。然后我想要得到5如上。如何实现这个 – user2365917 2013-05-10 10:21:08

+0

在while循环中检查是否读取的行(不包括\ r \ n)是一个数字。 StepTNT的回答上面给出了一种方法。 – chooban 2013-05-10 10:47:04