如何通过 space+ 转义 Java 中的初始 spaces 拆分字符串?

How to split a string by space+ escaping initial spaces in Java?

我有:

String s = "Hello    world";

String s = "   Hello    world ";

结果应该是:

String[] splited = s.split("REGEX");
splited[0].equals("   Hello"); \true
splited[1].equals("world "); \true

我确实喜欢这样:s.trim().split(" +"); 但我在 splited[0] 中丢失了第一个 space,但 space 应该保留。

有限的(开头1000个空格)方式:

String[] splited = s.split("(?<!\A\s{0,1000})\s+(?=\S)");

详情:

(?<!\A\s{0,1000}) # not preceded by white-spaces at the start of the string
\s+                # white-spaces
(?=\S)             # followed by a non white-space character

或对空格严格相同(不适用于制表符或换行符...):

String[] splited = s.split("(?<!\A {0,1000}) +(?=[^ ])");

你可以结合否定 look ahead/behind assertions

String[] array = s.split("(?<!^\s*)\s+(?=\S)");
  • (?<!^\s*) 匹配字符串开头 + 0 或更多空格
  • (?=\S) 匹配非空白