缓冲读取器读取文本直到字符

时间:2015-06-14 16:57:59

标签: java file while-loop bufferedreader readline

我使用缓冲的阅读器来读取充满信息行的文件。一些较长的文本行扩展为多行,因此缓冲区将其视为新行。每行以';'符号结尾。所以我想知道是否有办法让缓冲读取器读取一行直到它到达';'然后将整行返回为字符串。这是我到目前为止使用缓冲读卡器的方式。

  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"));
                }
            }
        }

2 个答案:

答案 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的目的相矛盾。