Java 如何解析';什么是缓冲区?匹配正则表达式

Java 如何解析';什么是缓冲区?匹配正则表达式,java,regex,Java,Regex,我的一个学生有一项任务,那就是检查文件中是否有与正则表达式匹配的字符串。 诀窍是他的老师禁止一次阅读整个文件,然后解析它。相反,他说他应该使用缓冲区问题是,您永远不知道您要从文件中读取多少输入:如果您只从文件中多读取一个字符,则可能存在匹配序列。 于是老师写道: 使用解析器已知的技术: 将缓冲区的后半部分重写为缓冲区的第一部分 将文件的下一部分读到下半部分 检查整个缓冲区是否包含匹配序列 那么,该怎么做(想法)?在我看来,它并不能解决上述问题,而且它相当愚蠢和浪费。AMatcher确实使用了某种

我的一个学生有一项任务,那就是检查文件中是否有与正则表达式匹配的字符串。 诀窍是他的老师禁止一次阅读整个文件,然后解析它。相反,他说他应该使用缓冲区问题是,您永远不知道您要从文件中读取多少输入:如果您只从文件中多读取一个字符,则可能存在匹配序列。

于是老师写道: 使用解析器已知的技术:

  • 将缓冲区的后半部分重写为缓冲区的第一部分
  • 将文件的下一部分读到下半部分
  • 检查整个缓冲区是否包含匹配序列

  • 那么,该怎么做(想法)?在我看来,它并不能解决上述问题,而且它相当愚蠢和浪费。

    A
    Matcher
    确实使用了某种内部缓冲区。但是,如果您查看构建
    匹配器的原型,您会发现它作为参数的唯一内容是一个简单的,它只有三个操作:

    • 知道它的长度
    • 以给定偏移量获取一个字符
    • 获取子序列(另一个
      CharSequence
    从文件读取时,一种可能是使用
    FileChannel.map()
    映射整个文件,然后使用适当的
    CharsetDecoder
    读入
    CharBuffer
    (实现
    CharSequence
    )。或者分块做


    。。。或者用你真正的疯狂想法:!我已经在800多个MiB文件上测试了它,它可以工作…

    一个
    匹配器确实使用了某种类型的内部缓冲区,当然。但是,如果您查看构建
    匹配器的原型,您会发现它作为参数的唯一内容是一个简单的,它只有三个操作:

    • 知道它的长度
    • 以给定偏移量获取一个字符
    • 获取子序列(另一个
      CharSequence
    从文件读取时,一种可能是使用
    FileChannel.map()
    映射整个文件,然后使用适当的
    CharsetDecoder
    读入
    CharBuffer
    (实现
    CharSequence
    )。或者分块做


    。。。或者用你真正的疯狂想法:!我已经在800多个MiB文件上测试了它,它可以工作…

    一个
    匹配器确实使用了某种类型的内部缓冲区,当然。但是,如果您查看构建
    匹配器的原型,您会发现它作为参数的唯一内容是一个简单的,它只有三个操作:

    • 知道它的长度
    • 以给定偏移量获取一个字符
    • 获取子序列(另一个
      CharSequence
    从文件读取时,一种可能是使用
    FileChannel.map()
    映射整个文件,然后使用适当的
    CharsetDecoder
    读入
    CharBuffer
    (实现
    CharSequence
    )。或者分块做


    。。。或者用你真正的疯狂想法:!我已经在800多个MiB文件上测试了它,它可以工作…

    一个
    匹配器确实使用了某种类型的内部缓冲区,当然。但是,如果您查看构建
    匹配器的原型,您会发现它作为参数的唯一内容是一个简单的,它只有三个操作:

    • 知道它的长度
    • 以给定偏移量获取一个字符
    • 获取子序列(另一个
      CharSequence
    从文件读取时,一种可能是使用
    FileChannel.map()
    映射整个文件,然后使用适当的
    CharsetDecoder
    读入
    CharBuffer
    (实现
    CharSequence
    )。或者分块做


    。。。或者用你真正的疯狂想法:!我已经在800多个MiB文件上测试了它,它可以工作…

    你的老师说:

    • 正则表达式永远不需要匹配长度超过缓冲区长度一半的任何内容
    • 匹配可能位于缓冲区边界上,因此需要移动:
    这似乎很现实


    BufferedReader逐行读取似乎并不完全合适。也许你可以考虑一个字节数组,BuffReDeEndoStudio.

    < P>你的老师在说什么:

    • 正则表达式永远不需要匹配长度超过缓冲区长度一半的任何内容
    • 匹配可能位于缓冲区边界上,因此需要移动:
    这似乎很现实


    BufferedReader逐行读取似乎并不完全合适。也许你可以考虑一个字节数组,BuffReDeEndoStudio.

    < P>你的老师在说什么:

    • 正则表达式永远不需要匹配长度超过缓冲区长度一半的任何内容
    • 匹配可能位于缓冲区边界上,因此需要移动:
    这似乎很现实


    BufferedReader逐行读取似乎并不完全合适。也许你可以考虑一个字节数组,BuffReDeEndoStudio.

    < P>你的老师在说什么:

    • 正则表达式永远不需要匹配长度超过缓冲区长度一半的任何内容
    • 匹配可能位于缓冲区边界上,因此需要移动:
    这似乎很现实


    BufferedReader逐行读取似乎并不完全合适。也许你可以考虑一个字节数组,BuffReDeEndoStudio.

    学生可以使用外部库吗?我有他需要的……是的,他有。我只需要使用BufferedReader,逐行读取并处理每一行,但regex仍然可以包含“\\n”,所以让我直截了当地说,这是你的一个学生,他有另一个老师,你不能直接与老师交流?注意:这个所谓的另一位老师所引用的技术对语法分析理论来说是未知的。学生可以使用外部图书馆吗?我有他需要的……是的,他有。我会的