2016-04-28 7 views
0

Ich muss ein Programm schreiben, das eine chemische Gleichung des Benutzers als eine Eingabe nimmt, wie NaCl2, und es in einzelne Elemente und die mit ihnen verbundene Zahl austeilt. Gibt es eine Möglichkeit, eine Saite zu analysieren und die einzelnen Elemente zu paaren, wie in NaCl2 zu Na und Cl2?Chemische Gleichung Parsing

+0

Wäre nicht die jeweiligen Kationen/Anionen in Na drehen (-2) und Cl (-1). Und handle extra Ionen entsprechend. Sie könnten das Periodensystem einfach in eine Hash-Map oder so etwas codieren. – Tdorno

+0

Ich habe nichts versucht. Meine Gedanken sind, dass, wenn ein Zeichen Großbuchstaben ist, dann ein neues Element beginnt, und wenn das nächste Großbuchstaben ist, ist dies das Ende des Elements, und wenn das Zeichen danach eine Zahl ist, wird es auch mit diesem Element gepaart , außer, dass ich sowieso nicht gelernt habe, dass es hilft festzustellen, ob ein Zeichen Groß- oder Kleinbuchstaben ist. –

Antwort

0

Wie Sie in einem Kommentar erwähnt haben, ist die Überprüfung, ob Groß- oder Kleinbuchstaben verwendet werden, der Schlüssel zu diesem Problem. Was Sie suchen, um dies zu lösen, ist die Character.isUppercase() Methode. Ihr Code sollte über die Zeichen im Eingabe-String iterieren und diese an diese Methode übergeben. Ich schrieb diesen groben Entwurf eines Codes bis es zu zeigen (und druckt es auch die Ausgabe für Sie - wie praktisch!):

public static void main(String[] args) { 

Scanner sc = new Scanner(System.in); 
ArrayList<String> elements = new ArrayList<>(); 
System.out.print("Enter formula: "); 
String formula = sc.next(); 
String s = ""; 

for (int i=0; i<formula.length(); i++) { 
    if (Character.isUpperCase(formula.charAt(i))) { 
     if (!s.isEmpty()) { 
      elements.add(s); 
     } 
     s = "" + formula.charAt(i); 
    } else { 
     s += formula.charAt(i); 
    } 
} 
elements.add(s); 

for (int i=0; i<elements.size(); i++) { 
    System.out.print(elements.get(i) + " "); 
} 

System.out.println(); 
} 
+0

Ok. Neue Info Ich muss die atomare Masse jedes Elements durch eine Textdatei erwerben, die ich gerade fertig geschrieben habe, und danach muss ich das Molekulargewicht berechnen und dann die Verbindung und das Gewicht zusammen mit dem Benutzernamen in eine Textdatei ausgeben. Ich kann ihren Namen mit einem Scanner, den ich kenne, verwenden, aber ich bin mir nicht sicher, wie ich in einer Datei lesen oder schreiben soll. @BethanyLouise –

+0

Sie können einen FileWriter verwenden, um in eine Datei zu schreiben. https://docs.oracle.com/javase/7/docs/api/java/io/FileWriter.html Sie müssen sicherstellen, dass Sie es mit 'close()' schließen, bevor Sie das Programm oder den Text beenden Datei wird nur leer sein. Um von einer Datei zu lesen, können Sie einfach einen Scanner verwenden, der aus der Datei liest anstatt von 'System.in'. Wenn Sie mit Dateioperationen zu tun haben, müssen Sie auch Ihr Programm so einrichten, dass es eine IOException auslöst oder den relevanten Teil des Codes in einen try-catch-Anweisungsblock einfügt. Wenn Sie eine IDE wie Netbeans verwenden, werden Sie dazu aufgefordert. –

0

Dies kann eine Reihe von Arten erfolgen. Einer von ihnen verwendet reguläre Ausdrücke. In diesem Fall sucht der Ausdruck nach einem Großbuchstaben, optional gefolgt von einem Kleinbuchstaben, optional gefolgt von einer Zahl.

Pattern elementPattern = Pattern.compile("(\\p{Upper}\\p{Lower}?)(\\p{Digit}*)"); 

Dies kann dazu verwendet werden, um alle Elemente in der Eingabe zu finden:

Matcher elementMatcher = elementPattern.match(input); 
while (elementMatcher.find()) { 
    String element = elementMatcher.group(1); 
    String count = elementMatcher.group(2); 
    System.out.println("Element: " + element + " count: " + count); 
}