我正在尝试使用分隔符拆分值。但我发现了令人惊讶的结果
String data = "5|6|7||8|9||"; String[] split = data.split("\\|"); System.out.println(split.length);
我期望得到 8 个值。 [5,6,7,EMPTY,8,9,EMPTY,EMPTY] 但我只得到 6 个值。
任何想法以及如何解决。无论 EMPTY 值来自任何地方,它都应该在数组中。
split(delimiter)默认情况下从结果数组中删除尾随的空字符串。要关闭此机制,我们需要使用重载版本的split(delimiter, limit)withlimit设置为负值,例如
split(delimiter)
split(delimiter, limit)
limit
String[] split = data.split("\\|", -1);
更多细节: split(regex)内部返回结果,您可以在此方法split(regex, 0)的文档中找到(强调我的)
split(regex)
split(regex, 0)
该limit参数控制应用模式的次数,因此会影响结果数组的长度。 如果限制n大于 零 ,则该模式将最多应用 n - 1 次,数组的长度将不大于 n,并且数组的最后一个条目将包含最后一个匹配分隔符之外的所有输入。 如果 为非正数*n,则该模式将被应用尽可能多的次数,并且该数组可以具有任意长度。 * 如果n为零,则该模式将被应用尽可能多的次数,数组可以有任意长度,并且 尾随的 空字符串将被丢弃 。
该limit参数控制应用模式的次数,因此会影响结果数组的长度。
如果限制n大于 零 ,则该模式将最多应用 n - 1 次,数组的长度将不大于 n,并且数组的最后一个条目将包含最后一个匹配分隔符之外的所有输入。
n
如果 为非正数*n,则该模式将被应用尽可能多的次数,并且该数组可以具有任意长度。 *
如果n为零,则该模式将被应用尽可能多的次数,数组可以有任意长度,并且 尾随的 空字符串将被丢弃 。
例外 :
值得一提的是, 只有当这种空字符串是由拆分机制创建时 ,删除尾随空字符串才有意义。因此,"".split(anything)由于我们无法""进一步拆分,我们将获得结果[""]数组。 发生这种情况是因为此处没有发生拆分,因此""尽管为空且尾随代表 原始 字符串,而不是由拆分过程 创建的空字符串。
"".split(anything)
""
[""]