为什么使用split会导致单独的数组大小?

时间:2015-01-24 01:11:04

标签: java arrays regex string split

假设我有以下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大一号?

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

2 个答案:

答案 0 :(得分:4)

你正在分裂"而不是数字"与\\D。但是,7之前的空格也表示一个分隔符,前面有空字符串。因此,z的长度为4

但是,133之后有一个空格。为什么后面没有空字符串,因此y的长度为4?因为no-arg split method会丢弃尾随空字符串,但不会导致空字符串。

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

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

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

答案 1 :(得分:1)

试试这个:

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