括弧に基づいて文字列を分割しようとして問題が発生しています。このFe(C5H5)2FeO3のような文字列があり、文字列を配列に分割して配列が読み取られるようにする必要があります
フェ
(C5H5)2
FeO3
このコードを使用しています。
String form = "Fe(C5H5)2FeO3";
from.split([()]+);
「)」の後の文字を分割するのに問題があります。これは、同じ文字列内の複数の () セットに対しても機能する必要があります。
ありがとう
ポジティブなルックアヘッドとルックビハインドは、次のようなことができます:
String formula = "Fe(C5H5)2FeO3";
String regex = "(?=\\()|(?<=\\)\\d)";
String[] tokens = formula.split(regex );
System.out.println(Arrays.toString(tokens));
詳細については、正規表現のチュートリアルをご覧ください。
正規表現で分割する代わりに、単純な正規表現を使用してシーケンスの一部を一致させることができます。
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