在Java中通过管道拆分会产生不同的结果

Cht*_*ect 3 java regex arrays split guava

在任何人得出结论之前,是的,我知道需要逃脱管道符号 :-)

......在我的代码中,我已经这样做了:

String line = "C0000005|A13433185|SCUI|RB|C0036775|A7466261|SCUI||R86000559||MSHFRE|MSHFRE|||N||"
line = line.trim();
String[]     columns_array = line.trim().split("\\|");           // length = 15
List<String> columns_list  = Splitter.on("|").splitToList(line); // size   = 17
Run Code Online (Sandbox Code Playgroud)

我正在解析一个巨大的文件(~5GB),其中每一行都是管道分隔的,上面line是该文件中的第一个,我的代码崩溃,索引超出界限错误.经过调试,我意识到发生了什么,并添加了番石榴Splitter线作为一个完整性检查.使用拆分器,我得到了预期的列表.

为什么番石榴分离器和原生分裂的结果不同?

Ale*_*rov 6

String.split()从结果数组中删除尾随空字符串.并且在字符串末尾有两个分隔符(split(...||)).

以下是文档的摘录:http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split%28java.lang.String%29

此方法的工作方式就像调用带有给定表达式和limit参数为零的双参数split方法一样.因此,结尾的空字符串不包含在结果数组中.