[编辑]我找到了答案,但由于新用户的限制,我无法回答这个问题。不管怎样,这是 Java 中的一个已知错误。
http://bugs.java.com/bugdatabase/view_bug.do?bug_id=8028387 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 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
Thanks!
有关文件/java版本的详细信息:
使用 java-6-openjdk-amd64 运行 Ubuntu(也使用 oracle java6 进行了测试)
文件是UTF-8编码的简单文本文件。
As Pattern http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html文档状态
-
\z
输入结束
-
\Z
输入的结尾,但最后的终止符(如果有)
我怀疑由于扫描仪缓冲区大小设置为1024 http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7u40-b43/java/util/Scanner.java#354,
354 http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7u40-b43/java/util/Scanner.java#354 private static final int BUFFER_SIZE = 1024; // change to 1024;
扫描仪读取此数量的字符并将其用作当前输入,因此\z
可以在这里用来表示它的结束,而\Z
不能,因为它不是“最终终止符”(整个输入中有更多元素需要读取)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)