2012-05-14 54 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