2013-01-10 13 views
0

如果我有超过800兆的数据,数据是没有断线。 我将使用正则表达式示例Ex。的Java ::如何使用正则表达式的文件不需要行突破了800兆

String.replaceAll("([a-z][a-z][.?!]+) ?([A-Z][a-z]+)", "$1\r\n$2"); 

或其他。

请指导我如何在文件大小的情况下使用正则表达式。

+2

问:有尝试过吗?绝对好奇;) – paulsm4

+0

你绝对不希望使用正则表达式! – fge

+2

800兆字节太大,实际上在内存中是一个字符串。你应该使用一个命令行工具可以处理该文件作为流,流像'sed' – Bohemian

回答

0

你肯定不希望使用正则表达式这样的大小。

如果您没有任何经典的Unix工具(sed,perl,awk)可供您使用,请查看Guava的CharMatcher:以字节数组读取文件,将其转换为字符串,使用CharMatcher找到任何感兴趣的东西,如果是写一个修改过的数组。

而且,当然,不要内联编写,而应该编写另一个文件,如果您已成功执行转换,则将其重命名为原始文件。

为了您的标点符号的需求,例如,你可以使用一个CharMatcher.anyOf("?!.")

0

只要你有足够的RAM来加载内存中的数据,我不知道为什么它不能完成。我认为如果32位系统64可以处理更大数量的寻址,那么它的极限值就是体系结构,那就是它将使用4GB的极限。

您还需要Java虚拟机设置你很多比默认的虚拟机最大内存设置大。 例如

java -Xmx1g myprogram 

我仍然不会重装它。 是不是有办法你可以先分割文件。 找到一个通用的分隔符。 感谢