2014-02-22 60 views
2

我在java中有一個lookbehind的問題。 以下方法正則表達式在Java中看後面

public static void main (String[] args) throws java.lang.Exception 
{ 
    String num = "1E-12x10"; 
    String[] numArr = num.split("(?<!E)\\-"); 
    System.out.println(numArr[0]); 

} 

產生預期的輸出1E-12×10 - 「 - 」它不會在分割。

以下方法

public static void main (String[] args) throws java.lang.Exception 
{ 
    String num = "1E-12x10"; 
    String[] numArr = num.split("[x\\-]"); 
    System.out.println(numArr[0] + " " + numArr[1] + " " + numArr[2]); 

} 

也產生在兩個 'X' 和期望輸出1E 12 10,分裂 ' - '。

但是,當我嘗試以下方法

public static void main (String[] args) throws java.lang.Exception 
{ 
    String num = "1E-12x10"; 
    String[] numArr = num.split("[x(?<!E)\\-]"); 
    System.out.println(numArr[0] + " " + numArr[1] + " " + numArr[2]); 

} 

我希望字符串拆分上「X」,但不是「 - 」。然而,發生的是它分裂在'x','E'和' - '上。我不太確定這裏發生了什麼事。

回答

3

你不能在裏面放置一個lookbehinds 一個字符類。您需要使用的交替,就像這樣:

String[] numArr = num.split("x|(?<!E)-"); 

這將分裂的任何x字符的字符串,或任何-不是由E字符開頭。另請注意,在這種情況下,\\-之前不是必需的。

+0

太棒了,很快!謝謝。 – user2056257