2012-05-14 98 views
2

我遇到了一個問題,要根據圓括號拆分sting。 我有這樣 的Fe(C5H5)2FeO3一個字符串,我需要在分裂刺到陣列,使得所述陣列讀取根據圓括號和下一個字符串拆分字符串

(C5H5)2

的FeO 3

我使用這個代碼。

String form = "Fe(C5H5)2FeO3"; 
from.split([()]+); 

我很難得到「)」之後的字符分割。 這也必須爲同一個字符串中的多個()集合起作用。

感謝

+0

你能澄清你想要的結果嗎?編輯:好的,我看到更多,但爲什麼2與中間組,而不是結束?這不是在括號內分裂。另外,你有沒有看過正則表達式,然後向後看? –

+0

顯然,OP想要解析化學公式。 – mellamokb

+0

是的,但現在還沒有分開括號。 –

回答

3

積極向前看,向後看,可以做一些這樣的:

String formula = "Fe(C5H5)2FeO3";  
String regex = "(?=\\()|(?<=\\)\\d)"; 
String[] tokens = formula.split(regex); 
System.out.println(Arrays.toString(tokens)); 

更多關於這一點,檢查出regular expressions tutorial

+1

就在我寫評論的時候,幹得好! :D但我認爲你可以做到這一點,事實上沒有任何變化。 – m0skit0

+1

@ m0skit:謝謝! –

1

您可以使用一個簡單的正則表達式匹配的部分而不是在正則表達式上分割:

import java.util.*; 
import java.util.regex.*; 
import java.lang.*; 

class Main { 
    public static void main (String[] args) throws java.lang.Exception 
    { 
      String formula = "Fe(C5H5)2FeO3"; 
      Pattern p = Pattern.compile("[^(]+|[(][^)]*[)]\\d+"); 
      Matcher m = p.matcher(formula); 
      while (m.find()) { 
        System.out.println(m.group()); 
      } 
    } 
} 

此程式produces輸出如下:

Fe 
(C5H5)2 
FeO3