+ 1
parse number of atoms in a molecule
i come up with this solution but it works only with single letter molecules. pls help me with changes required for molecules with 2 character like Na2Cl3OH https://code.sololearn.com/c04N5cq6IDdo/?ref=app
4 Réponses
+ 5
A complete sample:
import java.util.regex.*;
import java.util.*;
class Dcoder
{
public static void main(String s[])
{
String input = "Na2Cl3OH";
Pattern p = Pattern.compile("(Na|Cl|O|H)([0-9]*)");
Matcher m = p.matcher(input);
Map <String, Integer> atoms = new HashMap<>();
while (m.find()) {
String element = m.group(1);
Integer count = Integer.parseInt(m.group(2).equals("") ? "1" : m.group(2));
atoms.put(element, count + (atoms.get(element) == null ? 0 : atoms.get(element)));
}
System.out.println(atoms);
}
}
+ 5
In order for it to properly recognise elements in the molecule, you have to teach it about element symbols. This can be easily achieved by altering the regex pattern.
Pattern p = Pattern.compile("([A-Z])([0-9]*)");
The current regex pattern recognises any single character [A-Z] followed by 0 or more numeric values. Do something like:
Pattern p = Pattern.compile("(Na|Cl|O|H)([0-9]*)");
in order to get it to capture the element symbols properly.
However, you still have to fix the part about printing the element names. Your current implementation prints only the first character from the first captured group using regex. Try to alter the program to print two characters when required.
+ 5
Where did you get this code by the way... It blew my previous attempt to help you off into space so I'm quite salty at the moment.
0
thank you