在bufferedReader中读取行

时间:2012-04-29 17:21:02

标签: java bufferedreader

来自javadoc

public String readLine()
            throws IOException

Read a line of text. A line is considered to be terminated by any one of a line feed ('\n'), a carriage return ('\r'), or a carriage return followed immediately by a linefeed. 

我有以下类型的文字:

Now the earth was formless and empty.  Darkness was on the surface
of the deep.  God's Spirit was hovering over the surface
of the waters.

我正在阅读以下几行:

 while(buffer.readline() != null){
       }

但是,问题是它是在换行之前考虑一个字符串upto.But我想在字符串以.结束时考虑行。我该怎么办?

4 个答案:

答案 0 :(得分:7)

您可以使用Scanner并使用useDelimiter(Pattern)设置自己的分隔符。

请注意,输入分隔符为regex,因此您需要提供正则表达式\.(您需要在正则表达式中打破字符.的特殊含义)

答案 1 :(得分:5)

您可以一次读取一个字符,并将数据复制到StringBuilder

Reader reader = ...;
StringBuilder sb = new StringBuilder();
int ch;
while((ch = reader.read()) >= 0) {
    if(ch == '.') break;
    sb.append((char) ch);
}

答案 2 :(得分:4)

  • 使用java.util.Scanner代替缓冲的阅读器,并使用"\\."将分隔符设置为Scanner.useDelimiter()。 (但请注意,分隔符已被使用,因此您必须再次添加分隔符!)
  • 或读取原始字符串并将其拆分为每个.

答案 3 :(得分:4)

您可以按每.分割整个文本:

String text = "Your test.";
String[] lines = text.split("\\.");

分割文本后,您会得到一系列线条。如果您想要更多控制,也可以使用正则表达式,例如也可以:;拆分文字。只是谷歌吧。

PS。:也许您必须首先使用以下内容删除新行字符:

text = text.replaceAll("\n", "");