根据括号和下一个字符拆分字符串

时间:2012-05-14 21:47:18

标签: java string split

我遇到了一个基于括号分裂刺痛的问题。 我有这样的字符串 Fe(C5H5)2FeO3和我需要将sting分成一个数组,所以数组读取

(C5H5)2

的FeO 3

我正在使用此代码。

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

我无法在“)”分开后获得字符。 这也必须适用于同一个字符串中的多组()。

由于

2 个答案:

答案 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 :(得分: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