2

我在尝试根据括号拆分刺痛时遇到问题。我有一个像这样 Fe(C5H5)2FeO3 的字符串,我需要将字符串拆分为一个数组,以便数组读取

(C5H5)2

三氧化二铁

我正在使用此代码。

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

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

谢谢

4

2 回答 2

3

积极向前看和向后看可以做到这一点:

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

有关这方面的更多信息,请查看正则表达式教程

于 2012-05-14T22:00:36.540 回答
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());
            }
    }
}

该程序产生以下输出:

Fe
(C5H5)2
FeO3
于 2012-05-14T22:07:27.563 回答