解析化学式


问题内容

我正在尝试为应用程序编写一种方法,该方法采用化学式(例如“ CH3COOH”)并返回充满其符号的某种集合。

CH3COOH将返回[C,H,H,H,C,O,O,H]

我已经有一些可以工作的东西了,但是它非常复杂,并且使用了很多带有嵌套if-else结构和循环的代码。

有没有一种方法可以通过将某种正则表达式与String.split一起使用,或者以其他出色的简单代码来实现?


问题答案:

假设正确将其大写,则方程中的每个符号都与该正则表达式匹配:

[A-Z][a-z]*\d*

(对于受到化学攻击的元素,元素的符号始终为大写字母,后跟可选的小写字母或两个小写字母,例如汞的汞)

您可以像这样捕获元素符号和组中的数字:

([A-Z][a-z]*)(\d*)

所以是的,从理论上讲,这将有助于正则表达式。如果您正在处理像C 6 H 2(NO 2)3(CH 3)3这样的公式,那么您的工作当然会难一些…