Java拆分字符串正则表达式:领先的空格

时间:2014-04-21 06:46:33

标签: 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.trim()。

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

3 个答案:

答案 0 :(得分:2)

我认为这应该回答你的问题。

取自String docs

  

将此字符串拆分为给定正则表达式的匹配项。

     

此方法的工作方式就像通过调用双参数split方法一样   给定的表达式和一个零的限制参数。尾随空   因此,字符串不包含在结果数组中。

答案 1 :(得分:0)

除了anirudh所说的,还要注意另一个选择:包括带有“I”的前导空格:

(?<!^)\s+

这会给你

 I
want
to
be
split
\t!

(并摆脱烦人的第一场比赛)

答案 2 :(得分:0)

在Java中匹配其自己的本机字符集上的空白区域,因为Java不支持Unicode空白属性 - 即使严格要求这样做以满足 UTS#18’s RL1.2! < / p>

这些的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