Ich habe Probleme bei einem Projekt, bei dem es um chemische Formeln geht. Ich habe zwei Klassen, Term und Formel.Java: Eine Zeichenfolge analysieren und in Begriffe zerlegen
Der Begriff empfängt Eingaben wie "H" oder "C2" - mit nur einem Buchstaben und einer beliebigen Anzahl nachfolgender Zahlen. Seine Felder sind Element und Atome - Element speichert den Charakter des Elements "H" oder "C", und Atome speichern den int-Wert der Anzahl der Atome, 1 oder 2.
Ich schrieb den Konstruktor als solchen;
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);
}
}
Ich verstehe das. Mein Problem ist in der Klasse Formel, die Strings wie "CH3CH2CH2CH2CH2CH3" empfängt. Es beinhaltet eine ArrayList, die Term-Objekte, die Terme genannt werden, speichert. Ich muss einen Konstruktor schreiben, der eine Formel wie "CH2O" erhalten kann, und würde die Begriffe {Term ('C', 1), Term ('H', 2), Term ('O', 1) } etc.
Ich habe wirklich Mühe herauszufinden, wie man den Konstruktor die Begriffe innerhalb der Eingabe-String zu identifizieren - ich habe über ValueOf und IndexOf gedacht, oder Teilstring, aber kann nicht scheinen, es zu bekommen. Mein erster Versuch war;
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); }
Ich verstehe seine sehr falsch und nur identifiziert Begriffe, die nur einen Charakter haben, aber nicht Anzahl von Atomen, wie ‚H‘. Ich habe das Gefühl, die Antwort beinhaltet die for-Schleife. Ich entschuldige mich für die Länge der Post, aber jede Hilfe wäre sehr willkommen.
Sie müssen schauen [lexikalische Analyse] (https://en.m.wikipedia.org/wiki/Lexical_analysis), die der Prozess ist eine Folge von Zeichen in sinnvollen „Token“ die Zerschlagung basierte auf einer [lexikalischen Grammatik] (https://en.m.wikipedia.org/wiki/Lexical_grammar), normalerweise definiert durch reguläre Ausdrücke. –
Sie könnten wahrscheinlich sofort die gesamte Eingabezeichenfolge in Großbuchstaben schreiben. Dann müssten Sie keine Großschreibung überprüfen. Sie müssen auch ein paar Dinge in Ihrer for-Schleife anders machen. Erstens, du gehst zu weit. Sollte ich
ManoDestra
Müssen Sie mit 2-Buchstaben-Atomnamen wie "Na" und "Cl" umgehen? Oder ist es garantiert, dass man nur Moleküle erhält, die aus Atomen mit nur einem Zeichen bestehen? – AJNeufeld