解析化学式
问题内容:
我正在尝试为应用程序编写一种方法,该方法采用化学式(例如“ 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这样的公式,那么您的工作当然会难一些…