Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么在这里使用拆分会导致不同的数组大小?_Java_Arrays_Regex_String_Split - Fatal编程技术网

Java 为什么在这里使用拆分会导致不同的数组大小?

Java 为什么在这里使用拆分会导致不同的数组大小?,java,arrays,regex,string,split,Java,Arrays,Regex,String,Split,假设我有以下内容,stringexample=“12 8 133 | 7 4 2”

假设我有以下内容,
stringexample=“12 8 133 | 7 4 2”
首先,
String[]x=example.split(“\\\\”)然后

String[]y=x[0]。拆分(\\D”)

String[]z=x[1]。拆分(\\D”)

为什么z比y大一个尺寸

一般来说,建议采用什么方法来获取上述字符串?使用分隔符并将整数添加到列表或同等大小的数组中?

您使用
\\D
按“非数字”进行拆分。但是,
7
前面的空格也表示分隔符,前面是空字符串。因此,
z
具有长度
4

但是,
133
后面有一个空格。为什么后面没有空字符串,所以
y
也有长度
4
?因为将丢弃尾随的空字符串,但不丢弃前导的空字符串

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

String[] y = x[0].trim().split("\\D");
String[] z = x[1].trim().split("\\D");
此外,您可能希望使用模式
“\\D+”
,因此一行中的一个或多个非数字字符将作为分隔符。

您正在使用
\\D
按“非数字”进行拆分。但是,
7
前面的空格也表示分隔符,前面是空字符串。因此,
z
具有长度
4

但是,
133
后面有一个空格。为什么后面没有空字符串,所以
y
也有长度
4
?因为将丢弃尾随的空字符串,但不丢弃前导的空字符串

要删除开头的空字符串,请在拆分之前从
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+");
试试这个:

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+");

阵列中有什么?我想,如果你真的看一下数组,就会明白为什么它们有不同的大小7@immibis数组中有一个空格字符。我明白,但我不明白为什么会包括在内?我已经试过按照Enessay的建议使用“\\s+”。@Legato是空格字符还是空字符串?数组中有什么?我想,如果你真的看一下数组,就会明白为什么它们有不同的大小7@immibis数组中有一个空格字符。我明白,但我不明白为什么会包括在内?我已经试过按照Enessay的建议使用“\\s+”。@Legato是空格字符还是空字符串?