我需要提取给定偏移量所属的文本中的整行。例如:
"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...
最佳答案
以下方法将完成您想要的操作。
它计算每个字符,包括 CR
和 LF
字符,在 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/