有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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) 个答案

  1. # 1 楼答案

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

    摘自String docs

    Splits this string around matches of the given regular expression.

    This method works as if by invoking the two-argument split method with the given expression and a limit argument of zero. Trailing empty strings are therefore not included in the resulting array.

  2. # 2 楼答案

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

    (?<!^)\s+
    

    这给你

     I
    want
    to
    be
    split
    \t!
    

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

  3. # 3 楼答案

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

    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