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

标签 java

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

"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/

相关文章:

java - TLS 1.2 - key 对大小和加密 key 长度

java - Android 4.4 设置默认短信应用程序无需用户确认

java - Spring data jpa-没有定义名为 'entityManagerFactory'的bean;注入(inject) Autowiring 的依赖项失败

java - 需要将数组传递给另一个类

java - 请帮我理解以下代码中的 'assign'方法

java - Spring SimpleFormController - 浏览器后退按钮不起作用

java - 数学公式

java - 非空字符串的哈希码可以为零吗?

java - 通过提示用户输入垂直显示文本字符串

java - java程序的顺序执行==jvm的顺序激活?