-4

我应该编写一个程序来解析分子并获取原子数。像这样:C6H12OH 和输出应该是C=6, O=1, H=13

这是我到目前为止写的代码:

class ParseMolecule 
{ 
    public static void main(String s[])
    {
        System.out.println("The atoms count in the molecule C6H12OH is :" + getElementsMap("C6H12OH"));
    }

    public static Map<String, Integer> getElementsMap(String molecule) 
    {
        for(char c : molecule.toCharArray())
        {
            System.out.println(c);
        }
    }
}

这不是我的作业或任何东西。我刚刚在一个网站上找到了这个,我试图弄清楚。

4

2 回答 2

1

您可以从以下内容开始(仅适用于由单个字符表示的元素):

   String input = "C6H12OH";
   Pattern p = Pattern.compile("([A-Z])([0-9]*)");
   Matcher m = p.matcher(input);
   Map <Character, Integer> atoms = new HashMap<Character, Integer>();
   while (m.find()) {
       Character element = m.group(1).charAt(0);
       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);
于 2013-02-16T08:04:28.950 回答
0

伪代码:

char last = 0
for (char c: input)
  if (!isDecimal(c))
    if (count == 0) // no number between 2 characters
      count = 1
    map[last] += count
    last = c
    count = 0
  else
    count = count*10 + charToInt(c)
    last = 0
于 2013-02-16T16:49:38.443 回答