小编Ozg*_*urH的帖子

使用\ R模式的Java扫描程序使用(缓冲区边界问题)

执行摘要:\R Java中是否存在任何警告/已知问题(或其他正则表达式模式)Scanner(特别是关于内部缓冲区的边界条件)?

细节:由于我想在潜在的多平台输入文件上进行一些多线模式匹配,我使用了模式\R,根据Patternjavadoc是:

任何Unicode换行序列都相当于 \u000D\u000A|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029]

无论如何,我注意到在我的一个测试文件中,应该解析一个十六进制转储块的循环被缩短了.经过一些调试后,我注意到它结束的那一行是Scanner内部缓冲区的结束.

这是我写的一个测试程序来模拟这种情况:

public static void main(String[] args) throws IOException {
    testString(1);
    testString(1022);
}

private static void testString(int prefixLen) {
    String suffix = "b\r\nX";
    String buffer = new String(new char[prefixLen]).replace("\0", "a") + suffix;

    Scanner scanner = new Scanner(buffer);
    String pattern = "b\\R";
    System.out.printf("=================\nTest String (Len=%d): '%s'\n'%s' found with horizon=0 (w/o bound): %s\n", buffer.length(), convertLineEndings(
        buffer), pattern, convertLineEndings(scanner.findWithinHorizon(pattern, 0)));
    System.out.printf("'X' found with horizon=1: %b\n", scanner.findWithinHorizon("X", 1) != null);
    scanner.close(); …
Run Code Online (Sandbox Code Playgroud)

java regex java.util.scanner

12
推荐指数
1
解决办法
175
查看次数

标签 统计

java ×1

java.util.scanner ×1

regex ×1