化学式の周りを回転するプロジェクトに問題があります。私はTermとFormulaという2つのクラスを持っています。Java:文字列を解析して「用語」に分解する
用語は、「H」または「C2」などの入力を受け取ります。単一の文字と任意の数の次の数字のみを使用します。要素は「H」または「C」の要素の文字を格納し、アトムは1または2の原子数のint値を格納します。
コンストラクタはそのように記述しました。
public Term(String s)
{
if(s.length() == 1){
element = s.charAt(0);
atoms = 1; }
else {
element = s.charAt(0);
String sA = s.substring(1,s.length());
atoms = Integer.parseInt(sA);
}
}
私はそれを理解しています。私の問題は、 "CH3CH2CH2CH2CH2CH3"のような文字列を受け取るクラスの数式です。用語と呼ばれるTermオブジェクトを格納するArrayListが必要です。私は "CH2O"のような公式を受け取ることができるコンストラクタを書く必要があり、{Term( 'C'、1)、Term( 'H'、2)、Term( 'O'、1) }等
私は実際には、入力文字列内の用語を識別する方法を考え出すのに苦労しています - 私はvalueOfとindexOfについて考えましたが、部分文字列かもしれませんが、それを得ることはできません。私の最初の試みは、
terms = new ArrayList<>();
for(int i = 0; i <= s.length();i++)
{
if ((Character.isUpperCase(s.charAt(i))) && (Character.isUpperCase(s.charAt(i+1)))
{ Term formulaS = new Term(s.charAt(i));
terms.add(formulaS); }
私はその非常に間違って理解し、唯一の唯一の文字ではなく、そのような「H」としての原子の数を持っている用語を特定します。答えにforループが含まれていると感じています。私は投稿の長さをお詫び申し上げますが、どんな助けでも大歓迎です。
[レキシカル文法](https://en.m.wikipedia.org/wiki/Lexical_grammar)で、通常は正規表現で定義されます。 –
おそらく入力文字列全体をただちに大文字にすることができます。その後、大文字のチェックを行う必要はありません。また、forループでいくつかのことを行う必要があります。まず、あなたはあまりにも遠くに行きます。私は
ManoDestra
'' Na ''や' 'Cl" 'のような2文字の原子名を扱う必要がありますか?それとも、あなたは1つの文字記号だけの原子で構成された分子が与えられることが保証されていますか? – AJNeufeld