当我有一个像\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

09-26 22:05
查看更多