缓冲 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.

的目的相矛盾