如何读取流,直到它以字符串结尾

时间:2014-05-13 21:23:26

标签: java bufferedreader

我正在尝试读取一个Stream,它将一直读取,直到它以某个字符串结束。我想出了一些解决方案,但我不相信它是非常好的解决方案,因为大量的字符串转换和循环中的方法调用。有人可以建议我更好的解决方案。

  private static String readUntilEndsWith(BufferedReader reader,
                                          String endString) throws IOException
  {
    StringBuffer buffer = new StringBuffer();
    while (!buffer.toString().endsWith(endString))
      buffer.append(reader.readLine());
    return buffer.toString();
  }

2 个答案:

答案 0 :(得分:0)

仅读取当前行并对其进行评估。如果该行 ok ,请将其附加到buffer并继续阅读。这样,您只评估reader中的当前行,而不是整个内容。

StringBuilder buffer = new StringBuilder();
String line = reader.readLine();
while (line != null && !line.endsWith(endString)) {
    buffer.append(line);
    line = reader.readLine();
}
if (line != null) {
    buffer.append(line);
}
return buffer.toString();

答案 1 :(得分:0)

如果您的endString始终是一行中的字符串,那么您可以将条件重新设置为:

String line="";
do{
      line=reader.readLine();
      buffer.append(line);

}while (!line.endsWith(endString));

这样您就不必每次都将Buffer转换为字符串。

P.S。 我还建议使用StringBuilder代替StringBuffer 如果你的endString可能是几行的总和,你可以添加如下内容:

if(endString.endsWith(line) {
    if(buffer.toString().endsWith(endString)
        return buffer.toString();
}
相关问题