gpt4 book ai didi

java - 给定文本文件中单词的偏移量,java程序应该检索相应的行号

转载 作者:行者123 更新时间:2023-12-01 09:38:37 26 4
gpt4 key购买 nike

我需要提取给定偏移量所属的文本中的整行。例如:

"Therapist: Okay. {Pause} 
So, how do you feel about -- about this -- about what's going on with your health?

Participant: I don't like it.
There's nothing I can do about it.
{Pause}

Therapist: Yeah.\

15-30-28-0140.raw

Therapist: That doesn't sound so good.
A little bit stressful."

如果我要求 offsetNum=125,输出将是“参与者:我不喜欢它。”可以看出,应该考虑空行。

我编写了以下代码,该代码适用于某些文本文件,但适用于其他一些文件(不可靠):

 int offset = startingOffset;

try (LineNumberReader r = new LineNumberReader(new FileReader(Input))) {
int count = 0;

while (r.read() != -1 && count < offset)
{
count++;
}
if (count == offset)
{

lineNo = r.getLineNumber()
}

但是,我需要一种可靠的方法来获取实际行而不是 lineNo...

最佳答案

以下方法将完成您想要的操作。

它计算每个字符,包括 CRLF 字符,在 line 缓冲区中构建一行文本。在每一行的末尾,它检查 offsetNum 是否在该行内,包括第一个字符和换行符,如果在则返回该行。否则,它会清除缓冲区并继续下一行。

请注意,如果 offsetNum 位于 CRLF 对的 LF 上,它将返回空行,这是不正确的,但我会让你弄清楚这一点。

private static String readLineAtOffset(String fileName, int offsetNum) throws IOException {
int count = 0;
StringBuilder line = new StringBuilder();
try (BufferedReader reader = Files.newBufferedReader(Paths.get(fileName))) {
for (int ch; (ch = reader.read()) != -1; count++) {
if (ch != '\r' && ch != '\n')
line.append((char)ch);
else if (count < offsetNum)
line.setLength(0);
else
break;
}
}
return (count >= offsetNum ? line.toString() : null);
}

关于java - 给定文本文件中单词的偏移量,java程序应该检索相应的行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38623715/

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