下面是2个代码
System.out.println(",,,,,".split(",").length);
和
System.out.println(",,,,, ".split(",").length);
对于第一个代码,其打印结果为 0 ,对于第二个代码,其打印结果为6。
我的问题是为什么当我没有在末尾添加额外的空间时拆分无法识别“,” ,但是当我在末尾添加额外的空间时却能够识别拆分。
请注意,我已经使用正则表达式“ \\ s *,\\ s” 进行了尝试,但结果相同。
答案 0 :(得分:2)
我没有文档参考,但是凭经验,我在测试String#split
时看到的是,如果没有实际的文本匹配,则数组中也不会返回零宽度的匹配。因此,以下代码返回一个空数组:
",,,,,".split(",")
但是,如果您在一系列逗号的末尾添加一个空格,然后进行相同的拆分,则只有一个匹配的空格。结果,该数组将返回所有匹配项,包括零宽度匹配项:
",,,,, ".split(",")
但是,因为逗号之间没有内容,所以我将您的实际要求解释为希望将每个逗号分成一个单独的结果。如果是这样,则可以使用环顾四周进行拆分,如下所示:
String input = ",,,,,";
String[] parts = input.split("(?<=,)(?=,)");
for (String part : parts) {
System.out.println(part);
}
这将输出:
,
,
,
,
,
答案 1 :(得分:1)
<html>
<body>
<div class="field-group">
<div class="field">
<textarea rows="20" cols="70" class="relative" id="myTextarea">
Welcome!!
</textarea>
</div>
</div>
默认情况下从结果数组中删除结尾的空字符串。要保持空白,您可以将split()
设置为负值,而使用split(delimiter, limit)
,
limit
答案 2 :(得分:0)
让我们探索更多,看看以下拆分的有趣结果:
System.out.println(",,,,,,".split(",").length); // 0
System.out.println(",,,,,, ".split(",").length); // 7
System.out.println(",,, ,,,".split(",").length); // 4
System.out.println(" ,,,,,,".split(",").length); // 1
想知道这是为什么发生的原因是因为以下声明为docs中的split方法声明了
因此,空字符串不包含在结果中 数组。
文档:https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split(java.lang.String)
如果您不希望使用split方法删除该空格,则应使用另一个带有限制的split:
public String[] split(String regex,int limit)
文档:https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split(java.lang.String,%20int)
示例:
System.out.println(",,,,,,".split(",",-1).length); // 7
System.out.println(",,,,,, ".split(",",-1).length); // 7
System.out.println(",,, ,,,".split(",",-1).length); // 7
System.out.println(" ,,,,,,".split(",",-1).length); // 7
答案 3 :(得分:0)
忘记文档,我直接查看了代码,并在java.lang.String#split(java.lang.String, int)
中找到了以下代码:-
while (resultSize > 0 && list.get(resultSize - 1).length() == 0) {
resultSize--;
}
这证明它旨在删除最后一个元素(如果为空)。并继续执行直到最后一个元素的长度不为零为止。
此功能很有用,例如,如果您有字符串a,b,
,则应在结果数组中返回a
和b
,而不是最后一个空白字符''
在最后一个逗号之后。
如果您执行System.out.println(", ,,,".split(",").length);
,它将返回2
,因为上述while循环将不断从右侧减少结果,直到找到长度不为零的东西为止。
上面的while循环包含在if (limit == 0)
中。因此,如果要全部计算,请使用非零限制。如果您不希望有任何限制,请使用负数,例如-1。