Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.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中的String.Split(regex)返回的元素数组的大小小于实际的大小?_Java_Arrays_String_Split - Fatal编程技术网

为什么java中的String.Split(regex)返回的元素数组的大小小于实际的大小?

为什么java中的String.Split(regex)返回的元素数组的大小小于实际的大小?,java,arrays,string,split,Java,Arrays,String,Split,返回的元素数少于运行String.split()时预期的元素数 示例:-实际字符串是“country,12345,2,1,1,,”,因此返回的数组中应包含8个元素,但数组大小为“6” 代码:- 输出:- 为什么会这样?因为单参数split方法会删除尾随的空字段。如果要保留它们,请使用双参数版本,并使用负limit参数 String data1[] = line1.split(",", -1); 因为单参数split方法会删除尾随的空字段。如果要保留它们,请使用双参数版本,并使用负limit参

返回的元素数少于运行
String.split()时预期的元素数

示例:-实际字符串是“country,12345,2,1,1,,”,因此返回的数组中应包含8个元素,但数组大小为“6”

代码:- 输出:-
为什么会这样?

因为单参数
split
方法会删除尾随的空字段。如果要保留它们,请使用双参数版本,并使用负
limit
参数

String data1[] = line1.split(",", -1); 

因为单参数
split
方法会删除尾随的空字段。如果要保留它们,请使用双参数版本,并使用负
limit
参数

String data1[] = line1.split(",", -1); 

我认为您必须更改正则表达式:


字符串data1[]=line1.split(“\\,”)

我认为您必须更改正则表达式:

字符串data1[]=line1.split(“\\,”)

谢谢@Ian Roberts

Split()

为了更好地理解,请参见下面的代码-

案例1:

String line1 = "country,12345,2,1,,1, ,";
String data1[] = line1.split(",");
System.out.println("Length : "+data1.length);

Output : 7
由于逗号中的倒数第二个字符是something(但不是空的),所以split不会只计算最后一部分

案例2:

String line1 = "country,12345,2,1,,1,, ";
String data1[] = line1.split(",");
System.out.println("Length : "+data1.length);

Output : 8
由于逗号后的最后一个字符是something(但不是空的),split将计算所有部分。

谢谢@Ian Roberts

Split()

为了更好地理解,请参见下面的代码-

案例1:

String line1 = "country,12345,2,1,,1, ,";
String data1[] = line1.split(",");
System.out.println("Length : "+data1.length);

Output : 7
由于逗号中的倒数第二个字符是something(但不是空的),所以split不会只计算最后一部分

案例2:

String line1 = "country,12345,2,1,,1,, ";
String data1[] = line1.split(",");
System.out.println("Length : "+data1.length);

Output : 8

因为逗号后的最后一个字符是something(但不是空的),所以split将计算所有部分。

尝试输出数组中的每个元素,看看里面有什么?您使用的是什么Java版本?我认为Java 8改变了这一点,因为它总是为我打印
8
。@Aru我刚刚注意到,再看看这个问题,精确的示例代码将打印8(因为最后一个字段不是空的,在最后一个逗号后面有一个空格),但上面的“示例”没有尾随空格,对于
line1
的值,您将得到6。学会始终阅读您正在使用的JavaDoc!尝试输出数组中的每个元素,看看里面有什么?您使用的是什么Java版本?我认为Java 8改变了这一点,因为它总是为我打印
8
。@Aru我刚刚注意到,再看看这个问题,精确的示例代码将打印8(因为最后一个字段不是空的,在最后一个逗号后面有一个空格),但上面的“示例”没有尾随空格,对于
line1
的值,您将得到6。学会始终阅读您正在使用的JavaDoc!