使用\ Z vs \ z作为扫描仪分隔符的行为

时间:2014-03-12 11:25:58

标签: java character-encoding eof

[编辑]我找到了答案,但由于新用户的限制,我无法回答这个问题。无论哪种方式,这都是Java中的已知错误。

http://bugs.java.com/bugdatabase/view_bug.do?bug_id=8028387

我正在尝试将文件读取到64位ubuntu上的Java 6中的字符串中。 Java给了我一个非常奇怪的结果,"\\Z"它读取整个文件,但是"\\z"它读取整个字符串最多1024个字符。我已经阅读了所有课程的Java 6 API,但我很茫然。

\ Z和\ z的说明可在以下网址找到:

http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html#lt

可能导致这种奇怪行为的原因是什么?

String fileString = new Scanner(new File(fileName)).useDelimiter("\\z").next();
String fileString2 = new Scanner(new File(fileName)).useDelimiter("\\Z").next();
System.out.println("using Z : " + fileString2.length());
System.out.println("Using z "+ fileString.length());

输出: 使用Z:9720 使用z:1024

谢谢!

有关文件/ java-version的详细信息:

使用java-6-openjdk-amd64运行Ubuntu(也使用oracle java6测试) 文件是简单的文本文件UTF-8编码。

1 个答案:

答案 0 :(得分:8)

作为Pattern文档说明

  • \z输入的结尾
  • \Z输入的结尾,但是对于最终的终结符,如果有的话

我怀疑是因为扫描仪缓冲区大小设置为1024

354  private static final int BUFFER_SIZE = 1024; // change to 1024;

扫描程序读取此数量的字符并将其用作当前输入,因此\z可用于表示其结束,而\Z则不能,因为它不是“最终终结符”(那里是整个输入中要读取的更多元素。)