当字符串是所有换行符时,Java按换行符分割

Jie*_*eng 1 java regex

当我有一个类似的字符串\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);
     }
}
Run Code Online (Sandbox Code Playgroud)

您可以将代码复制并粘贴到CompileOnline中.

Jer*_*vel 5

您拆分的令牌不是结果的一部分.由于没有其他内容,因此没有项目可以放入数组中.

但是,当您向基本字符串添加另一个字符时,这会有所不同.当你这样做时,它将包括空条目.

这可以通过查看源代码来解释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);
Run Code Online (Sandbox Code Playgroud)

如果你的情况有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
Run Code Online (Sandbox Code Playgroud)