如果我有超过800兆的数据,数据是没有断线。 我将使用正则表达式示例Ex。的Java ::如何使用正则表达式的文件不需要行突破了800兆
String.replaceAll("([a-z][a-z][.?!]+) ?([A-Z][a-z]+)", "$1\r\n$2");
或其他。
请指导我如何在文件大小的情况下使用正则表达式。
如果我有超过800兆的数据,数据是没有断线。 我将使用正则表达式示例Ex。的Java ::如何使用正则表达式的文件不需要行突破了800兆
String.replaceAll("([a-z][a-z][.?!]+) ?([A-Z][a-z]+)", "$1\r\n$2");
或其他。
请指导我如何在文件大小的情况下使用正则表达式。
你肯定不希望使用正则表达式这样的大小。
如果您没有任何经典的Unix工具(sed,perl,awk)可供您使用,请查看Guava的CharMatcher:以字节数组读取文件,将其转换为字符串,使用CharMatcher找到任何感兴趣的东西,如果是写一个修改过的数组。
而且,当然,不要内联编写,而应该编写另一个文件,如果您已成功执行转换,则将其重命名为原始文件。
为了您的标点符号的需求,例如,你可以使用一个CharMatcher.anyOf("?!.")
。
只要你有足够的RAM来加载内存中的数据,我不知道为什么它不能完成。我认为如果32位系统64可以处理更大数量的寻址,那么它的极限值就是体系结构,那就是它将使用4GB的极限。
您还需要Java虚拟机设置你很多比默认的虚拟机最大内存设置大。 例如
java -Xmx1g myprogram
我仍然不会重装它。 是不是有办法你可以先分割文件。 找到一个通用的分隔符。 感谢
问:有尝试过吗?绝对好奇;) – paulsm4
你绝对不希望使用正则表达式! – fge
800兆字节太大,实际上在内存中是一个字符串。你应该使用一个命令行工具可以处理该文件作为流,流像'sed' – Bohemian