我使用缓冲的阅读器来读取充满信息行的文件。一些较长的文本行扩展为多行,因此缓冲区将其视为新行。每行以';'
符号结尾。所以我想知道是否有办法让缓冲读取器读取一行直到它到达';'
然后将整行返回为字符串。这是我到目前为止使用缓冲读卡器的方式。
String currentLine;
while((currentLine = reader.readLine()) != null) {
// trim newline when comparing with lineToRemove
String[] line = currentLine.split(" ");
String fir = line[1];
String las = line[2];
for(int c = 0; c < players.size(); c++){
if(players.get(c).getFirst().equals(fir) && players.get(c).getLast().equals(las) ){
System.out.println(fir + " " + las);
String text2 = currentLine.replaceAll("[.*?]", ".150");
writer.write(text2 + System.getProperty("line.separator"));
}
}
}
答案 0 :(得分:10)
使用Scanner
会更容易,您可以在其中设置分隔符:
Scanner scan = new Scanner(new File("/path/to/file.txt"));
scan.useDelimiter(Pattern.compile(";"));
while (scan.hasNext()) {
String logicalLine = scan.next();
// rest of your logic
}
答案 1 :(得分:2)
直接回答您的问题,这是不可能的。缓冲读取器无法提前扫描流以查找此字符,然后返回目标字符之前的所有内容。
当您使用缓冲式阅读器从流中读取时,您正在消耗角色,而且如果没有阅读,您就无法真正了解角色。
您可以使用继承方法read()
只读取单个字符,然后在检测到所需字符时停止。当然,这不是一件好事,因为它与BufferedReader的目的相矛盾。