当我有一个像\n\n\n
这样的字符串,并且被\\n
分割时,得到0
。为什么是这样?
public class Test {
public static void main(String []args){
String str = "\n\n\n";
String[] lines = str.split("\\n");
System.out.println(lines.length);
}
}
您可以将代码复制并粘贴到CompileOnline中。
最佳答案
您分割的令牌不属于结果的一部分。由于没有其他内容,因此没有可放入数组的项目。
但是,当您向基本字符串中添加另一个字符时,情况有所不同。当您这样做时,它将毕竟包括空条目。
可以通过查看java.lang.String:2305
中的源代码进行解释。
请考虑以下摘录:
// Construct result
int resultSize = list.size();
if (limit == 0)
while (resultSize > 0 && list.get(resultSize - 1).length() == 0)
resultSize--;
String[] result = new String[resultSize];
return list.subList(0, resultSize).toArray(result);
如果您有3个空条目,则
resultSize
将倒数至0,实际上将返回一个空数组。如果您有3个空条目,并且一个填充了一个(在末尾添加了随机字符),则
resultSize
不会从4开始移动,因此您将获得一个包含4个项目的数组,其中前3个为空。基本上,它将删除所有尾随的空值。
String str = "\n\n\n"; // Returns length 0
String str = "\n\n\nb"; // Returns length 4
String str = "\n\n\nb\n\n"; // Returns length 4