为什么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!