2013-02-16 29 views
-4

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

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

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); 
     } 
    } 
} 

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

+2

你需要表现出更多的努力 – exexzian 2013-02-16 07:24:31

+3

这就是你如何学习 - 通过计算出来。如果我们为你编写程序,我们会抢走你的经验。 – 2013-02-16 07:25:28

+0

[正则表达式](http://docs.oracle.com/javase/tutorial/essential/regex/)将成为你的朋友。 – 2013-02-16 07:26:02

回答

0

你可以先从以下(仅适用于由单个字符表示的元素):

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); 
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