gpt4 book ai didi

java - 与 String 的 split 方法混淆

转载 作者:搜寻专家 更新时间:2023-11-01 01:21:29 26 4
gpt4 key购买 nike

我已经完成了 String's split method documentation但结果并不如预期。当我们将 limit 参数设置为负值来拆分字符串时,它总是会附加一个空值。为什么要这样做?考虑一些情况

// Case 1
String str = "1#2#3#";
System.out.println(str.split("#").length); // Prints 3
System.out.println(str.split("#", -1).length); // Prints 4

我在这里期望的是打印 3。

// Case 2
str = "";
System.out.println(str.split("#").length); // Prints 1
System.out.println(str.split("#", -1).length); // Prints 1

现在由于没有找到匹配项,通常的无限制拆分方法应该打印 0,但它创建了一个包含空字符串的数组。

// Case 3
str = "#";
System.out.println(str.split("#").length); // Prints 0
System.out.println(str.split("#", -1).length); // Prints 2

现在我有一个匹配项,没有限制参数的拆分方法工作正常。这是我的预期输出,但为什么在这种情况下它不像情况 2 那样创建一个空数组?

// Case 4
str = "###";
System.out.println(str.split("#").length); // Prints 0
System.out.println(str.split("#", -1).length); // Prints 4

这里的第一个拆分方法符合预期,但为什么第二个拆分方法给出的是 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

现在是最后一个有正极限的情况。如果正数 <= 匹配数,则结果符合预期。但是,如果我们给出一个更高的正数限制,它会再次将一个空字符串附加到结果数组。

最佳答案

来自JavaDoc for String

The limit parameter controls the number of times the pattern is applied and therefore affects the length of the resulting array. If the limit n is greater than zero then the pattern will be applied at most n - 1 times, the array's length will be no greater than n, and the array's last entry will contain all input beyond the last matched delimiter. If n is non-positive then the pattern will be applied as many times as possible and the array can have any length. If n is zero then the pattern will be applied as many times as possible, the array can have any length, and trailing empty strings will be discarded.

强调我的。

在负极限情况下,空匹配不会被丢弃,所以,如果我用 E 表示空:

1#2#3# -> 1 # 2 # 3 # E
E -> E
# -> E # E
### -> E # E # E # E

在您的最后一个示例中(具有正限制),仅当 n == 0 时才丢弃空尾随空格。

关于java - 与 String 的 split 方法混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24702355/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com