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”,所以让我直截了当地说,这是你的一个学生,他有另一个老师,你不能直接与老师交流?注意:这个所谓的另一位老师所引用的技术对语法分析理论来说是未知的。学生可以使用外部图书馆吗?我有他需要的……是的,他有。我会的