我试图使用分隔符拆分值.但我发现了令人惊讶的结果
String data = "5|6|7||8|9||";
String[] split = data.split("\\|");
System.out.println(split.length);
Run Code Online (Sandbox Code Playgroud)
我期待得到8个值.[5,6,7,EMPTY,8,9,EMPTY,EMPTY] 但我只得到6个值.
任何想法和如何解决.无论EMPTY值在任何地方出现,它都应该在数组中.
在Java 8之前我们拆分空字符串之类的
String[] tokens = "abc".split("");
Run Code Online (Sandbox Code Playgroud)
分裂机制会在标有的地方分开 |
|a|b|c|
Run Code Online (Sandbox Code Playgroud)
因为""每个字符前后都有空格.因此,它最初将生成此数组
["", "a", "b", "c", ""]
Run Code Online (Sandbox Code Playgroud)
然后将删除尾随的空字符串(因为我们没有明确地为limit参数提供负值),所以它最终会返回
["", "a", "b", "c"]
Run Code Online (Sandbox Code Playgroud)
在Java 8中,拆分机制似乎已经发生了变化.现在我们用的时候
"abc".split("")
Run Code Online (Sandbox Code Playgroud)
我们将得到["a", "b", "c"]数组,而不是["", "a", "b", "c"]看起来像开始时的空字符串也被删除.但是这个理论失败了,例如
"abc".split("a")
Run Code Online (Sandbox Code Playgroud)
在start时返回带有空字符串的数组["", "bc"].
有人可以解释这里发生了什么,以及这些案例的拆分规则在Java 8中是如何变化的?