gpt4 book ai didi

Java RandomAccessFile - 处理不同的换行符样式?

转载 作者:行者123 更新时间:2023-12-02 08:33:48 26 4
gpt4 key购买 nike

我正在尝试通过 RandomAccessFile 进行查找,作为算法的一部分,我必须读取一行,然后从该行末尾向后查找

例如

String line = raf.readLine();
raf.seek (raf.getFilePointer() - line.length() + m.start() + m.group().length());

//m is a Matcher for regular expressions

我收到了大量相差一的错误,但无法弄清楚原因。我刚刚发现这是因为我正在读取的某些文件具有 UNIX 风格的换行符\r\n,而有些文件只有 Windows 风格的\n。

有没有一种简单的方法可以让 RandomAccessFile 将所有换行符视为 Windows 风格的换行符?

最佳答案

您始终可以将流备份两个字节并重新读取它们以查看它是\r\n 还是 (!\r)\n:

String line = raf.readLine();
raf.seek(raf.getFilePointer()-2);
int offset = raf.read() == '\r' ? 2 : 1;
raf.read(); //discard the second character since you know it is either \n or EOF by definition of readLine
raf.seek (raf.getFilePointer() - (line.length()+offset) + m.start() + m.group().length());

我不确定您要放置文件指针的确切位置,因此请适当调整 2/1 常量。如果文件中出现空行 (\n\n),您可能还需要添加额外的检查,就好像它出现一样,您可能会陷入无限循环,而没有代码来跳过它。

关于Java RandomAccessFile - 处理不同的换行符样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2505658/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com