我正在尝试读取一个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();
}
答案 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();
}