我知道之前已经问过如何使用前导空格分割字符串的问题,例如:
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()不能跳过前导空格,但可以在字符串的中间/末尾跳过。
答案 0 :(得分:2)
我认为这应该回答你的问题。
将此字符串拆分为给定正则表达式的匹配项。
此方法的工作方式就像通过调用双参数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