缓冲 Reader 读取文本直到字符
Buffered Reader read text until character
我正在使用缓冲 reader 来读入一个充满信息行的文件。一些较长的文本行扩展到不止一行,因此缓冲将它们视为新行。每行以 ';'
符号结尾。所以我想知道是否有办法让缓冲的 reader 读取一行直到它到达 ';'
然后 return 整行作为一个字符串。这是到目前为止我如何使用缓冲 reader。
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"));
}
}
}
使用 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
}
要直接回答你的问题,是不可能的。缓冲 Reader 无法提前扫描流以找到此字符,然后 return 目标字符之前的所有内容。
当您使用 Buffered Reader 从流中读取时,您正在使用字符,不阅读就无法真正了解字符。
您可以使用继承方法 read()
只读取单个字符,然后在检测到所需字符时停止。当然,这不是一件好事,因为它与 BufferedReader.
的目的相矛盾
我正在使用缓冲 reader 来读入一个充满信息行的文件。一些较长的文本行扩展到不止一行,因此缓冲将它们视为新行。每行以 ';'
符号结尾。所以我想知道是否有办法让缓冲的 reader 读取一行直到它到达 ';'
然后 return 整行作为一个字符串。这是到目前为止我如何使用缓冲 reader。
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"));
}
}
}
使用 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
}
要直接回答你的问题,是不可能的。缓冲 Reader 无法提前扫描流以找到此字符,然后 return 目标字符之前的所有内容。
当您使用 Buffered Reader 从流中读取时,您正在使用字符,不阅读就无法真正了解字符。
您可以使用继承方法 read()
只读取单个字符,然后在检测到所需字符时停止。当然,这不是一件好事,因为它与 BufferedReader.