Java拆分字符串正则表达式:前导空格

Java拆分字符串正则表达式:前导空格,java,regex,string,Java,Regex,String,我知道以前有人问过关于如何使用前导空格分割字符串的问题,例如: String str = " I want to be split \t!" String[] sarr = str.split("\\s+"); for(String s : sarr) System.out.println("'" + s + "'"); 生成结果: '' //leading white space 'I' 'want' 'to' 'be' 'split' '!' 解决此问题的方法是在拆分之前使用str.t

我知道以前有人问过关于如何使用前导空格分割字符串的问题,例如:

String str = " I want to be  split \t!"
String[] sarr = str.split("\\s+");
for(String s : sarr) System.out.println("'" + s + "'");
生成结果:

'' //leading white space
'I'
'want'
'to'
'be'
'split'
'!'
解决此问题的方法是在拆分之前使用str.trim()


我想知道的是,为什么split()不能跳过前导空格,但可以跳过字符串的中间/结尾。

我认为这应该回答您的问题

取自

围绕给定正则表达式的匹配项拆分此字符串

此方法的工作方式类似于通过调用具有 给定的表达式和零的极限参数。尾随空 因此,结果数组中不包括字符串


除了anirudh所说的,还要注意另一个选项:在前导空格中加上“I”:


(并且摆脱了恼人的第一个匹配)

在Java中,在其自身的本机字符集上匹配空白,因为Java不支持Unicode空白属性-即使这样做是严格要求满足

Unicode标准,因此您必须使用如下代码:

                     ""       /* dummy empty string for homogeneity */
                     "\\u0009" // CHARACTER TABULATION
                     "\\u000A" // LINE FEED (LF)
                     "\\u000B" // LINE TABULATION
                     "\\u000C" // FORM FEED (FF)
                     "\\u000D" // CARRIAGE RETURN (CR)
                     "\\u0020" // SPACE
                     "\\u0085" // NEXT LINE (NEL) 
                     "\\u00A0" // NO-BREAK SPACE
                     "\\u1680" // OGHAM SPACE MARK
                     "\\u180E" // MONGOLIAN VOWEL SEPARATOR
                     "\\u2000" // EN QUAD 
                     "\\u2001" // EM QUAD 
                     "\\u2002" // EN SPACE
                     "\\u2003" // EM SPACE
                     "\\u2004" // THREE-PER-EM SPACE
                     "\\u2005" // FOUR-PER-EM SPACE
                     "\\u2006" // SIX-PER-EM SPACE
                     "\\u2007" // FIGURE SPACE
                     "\\u2008" // PUNCTUATION SPACE
                     "\\u2009" // THIN SPACE
                     "\\u200A" // HAIR SPACE
                     "\\u2028" // LINE SEPARATOR
                     "\\u2029" // PARAGRAPH SEPARATOR
                     "\\u202F" // NARROW NO-BREAK SPACE
                     "\\u205F" // MEDIUM MATHEMATICAL SPACE
                     "\\u3000" // IDEOGRAPHIC SPACE

,int)我的错,如果我比以前更仔细地阅读java文档,这个问题可能可以避免。“此方法返回的数组包含此字符串的每个子字符串,这些子字符串由与给定表达式匹配的另一个子字符串终止,或由字符串结尾终止。”感谢您的及时回复!
 I
want
to
be
split
\t!
                     ""       /* dummy empty string for homogeneity */
                     "\\u0009" // CHARACTER TABULATION
                     "\\u000A" // LINE FEED (LF)
                     "\\u000B" // LINE TABULATION
                     "\\u000C" // FORM FEED (FF)
                     "\\u000D" // CARRIAGE RETURN (CR)
                     "\\u0020" // SPACE
                     "\\u0085" // NEXT LINE (NEL) 
                     "\\u00A0" // NO-BREAK SPACE
                     "\\u1680" // OGHAM SPACE MARK
                     "\\u180E" // MONGOLIAN VOWEL SEPARATOR
                     "\\u2000" // EN QUAD 
                     "\\u2001" // EM QUAD 
                     "\\u2002" // EN SPACE
                     "\\u2003" // EM SPACE
                     "\\u2004" // THREE-PER-EM SPACE
                     "\\u2005" // FOUR-PER-EM SPACE
                     "\\u2006" // SIX-PER-EM SPACE
                     "\\u2007" // FIGURE SPACE
                     "\\u2008" // PUNCTUATION SPACE
                     "\\u2009" // THIN SPACE
                     "\\u200A" // HAIR SPACE
                     "\\u2028" // LINE SEPARATOR
                     "\\u2029" // PARAGRAPH SEPARATOR
                     "\\u202F" // NARROW NO-BREAK SPACE
                     "\\u205F" // MEDIUM MATHEMATICAL SPACE
                     "\\u3000" // IDEOGRAPHIC SPACE