Sya*_*m S 4 java regex string split
我已经浏览了String的split方法文档,但结果并不像预期的那样.当我们将限制参数设置为负值的字符串拆分时,它总是附加一个空值.为什么要这样做?考虑一些情况
// Case 1
String str = "1#2#3#";
System.out.println(str.split("#").length); // Prints 3
System.out.println(str.split("#", -1).length); // Prints 4
Run Code Online (Sandbox Code Playgroud)
我期待的是印刷品3.
// Case 2
str = "";
System.out.println(str.split("#").length); // Prints 1
System.out.println(str.split("#", -1).length); // Prints 1
Run Code Online (Sandbox Code Playgroud)
现在因为没有找到匹配,所以通常的无限制拆分方法应该打印0但它创建一个空字符串的数组.
// Case 3
str = "#";
System.out.println(str.split("#").length); // Prints 0
System.out.println(str.split("#", -1).length); // Prints 2
Run Code Online (Sandbox Code Playgroud)
现在我有一个匹配和没有限制参数的拆分方法工作正常.它是我的预期输出,但为什么在这种情况下它不会像情况2那样创建一个空数组?
// Case 4
str = "###";
System.out.println(str.split("#").length); // Prints 0
System.out.println(str.split("#", -1).length); // Prints 4
Run Code Online (Sandbox Code Playgroud)
这里第一个分割方法是预期的,但为什么第二个方法给出4而不是3?
// Case 5
str = "1#2#3#";
System.out.println(str.split("#", 0).length); // Prints 3
System.out.println(str.split("#", 3).length); // Prints 3
System.out.println(str.split("#", 4).length); // Prints 4
Run Code Online (Sandbox Code Playgroud)
现在是具有正限制的最后一个案例.如果正数<=匹配数,则结果与预期一致.但是如果我们给出更高的正限制,它会再次向结果数组附加一个空字符串.
limit参数控制模式的应用次数,因此会影响结果数组的长度.如果限制n大于零,那么模式将最多应用n - 1次,数组的长度将不大于n,并且数组的最后一个条目将包含超出最后匹配分隔符的所有输入.如果n是非正数,那么模式将被应用尽可能多的次数,并且数组可以具有任何长度.如果n为零,那么模式将被应用尽可能多的次数,数组可以具有任何长度,并且将丢弃尾随的空字符串.
强调我的.
在负限制情况下,空匹配不会被丢弃,因此,如果我用空代表E:
1#2#3# -> 1 # 2 # 3 # E
E -> E
# -> E # E
### -> E # E # E # E
Run Code Online (Sandbox Code Playgroud)
在最后一个示例中(带有正限制),只有在丢弃空尾随空格时才会丢弃n == 0.
| 归档时间: |
|
| 查看次数: |
114 次 |
| 最近记录: |