2013-06-26 55 views
0

我有以下一段代碼拆分字符串並返回一個字符串數組。這個正則表達式在Java中如何工作?

public static void main(String[] args) { 
     String name="what is going on"; 
     String[] ary = name.split(""); 
     System.out.println(Arrays.toString(ary)); 
     } 
//output: [, w, h, a, t, , i, s, , g, o, i, n, g, , o, n] 

爲防止尾隨空格,在拆分過程中使用以下正則表達式。 但我想知道它是如何工作

public static void main(String[] args) { 
      String name="what is going on"; 
      String[] ary = name.split("(?!^)"); 
      System.out.println(Arrays.toString(ary)); 
      } //[w, h, a, t, , i, s, , g, o, i, n, g, , o, n] 

,如果有人可以解釋的正則表達式查找什麼,以及如何正則表達式,用於分裂,這將是對Java初學者社區非常有幫助。非常感謝

+1

http:// stackoverflow。 com/questions/6576625/why-is-equivalent-to – assylias

+0

我沒有一個完整的答案給你,但這裏有一個很好的參考。你在這裏處理的是「零寬度負向預測」。 http://www.regular-expressions.info/refadv.html –

+0

你可能想要閱讀[anchors](http://www.regular-expressions.info/anchors.html)和[lookarounds](http: //www.regular-expressions.info/lookaround.html)。 –

回答

4

在第一個示例中,空字符串匹配字符串中的每個字符之前。所以它匹配在第一個字符之前,第二個之前等。String.split(String) Javadoc指示尾隨的空字符串被忽略,但是返回的字符串包含第一個匹配之前的內容。所以,陣列是{"", "w", "h", ..., "n"}

第二個例子有一個正則表達式匹配除了字符串開頭以外的任何地方。 (?)束縛了前瞻。 !使其成爲負向前視,並且^意味着字符串的開始。此外,正則表達式實際上不會使用字符。所以,它在第一個字符之後匹配,在第二個之後匹配,等等。沒有任何字符本身會被消耗,所以你有:

w h a t i s g o i n g o n 
^^^^^^^^^^^^^^^^ 

這裏的插入符號是斷點,上面有一個空格。

+0

我認爲,將這個預測視爲一個非捕獲組可能有點混亂。否則,點亮。 –

+0

對。我錯過了那一個。我編輯了答案.. –

1

它將該字符串的子串和劃分它在正則表達式char或字符串: 但不把正則表達式轉換成輸出這樣:

字符串S1 =「空格劃分」; s1.split(「\ s」)[0]將被劃分爲 s1.split(「\ s」)[1]將是by而不是「」

相關問題