为什么在这里使用 split 会产生不同的数组大小?

Why is using split resulting in separate array sizes here?

假设我有以下内容,String example = "12 8 133 | 7 4 2";,我想将其更改为两个大小相等的数组,目的是稍后从每个数组中提取单独的整数。

首先是String[] x = example.split("\|");,然后是

String[] y = x[0].split("\D");

String[] z = x[1].split("\D");

为什么z比y大一码?

一般来说,使用分隔符将上述字符串添加到列表或等效大小的数组中的推荐方法是什么?

您将 "not a digit" 与 \D 分开。但是,7 之前的 space 也代表一个分隔符,前面是空字符串。因此,z 的长度为 4.

但是,133后面还有一个space。为什么后面没有空字符串,所以y也有长度4?因为 no-arg split method 丢弃尾随空字符串,但不丢弃前导空字符串。

要删除开头的空字符串,请在拆分前对 x 中的元素调用 trim()

String[] y = x[0].trim().split("\D");
String[] z = x[1].trim().split("\D");

此外,您可能希望使用模式 "\D+",因此一行中的一个 或更多 个非数字字符将被视为分隔符。

试试这个:

String example = "12 8 133 | 7 4 2";
String[] x = example.split("\s+\|\s+");
String[] y = x[0].split("\s+");
String[] z = x[1].split("\s+");