化学方程式解析



我必须编写一个程序,将用户的化学方程式作为输入,例如NaCl2,并将其分离为单独的元素和与之相关的数字。有没有办法解析字符串并将各个元素配对,例如在 NaCl2 中为 Na 和 Cl2?

正如您在评论中提到的,检查字母是大写还是小写是此问题的关键。您正在寻找解决此问题的方法Character.isUppercase()。代码应循环访问输入 String 中的字符,并将每个字符传递给此方法。我写了这个代码的粗略草案来演示它(它还为您打印输出 - 多么方便!

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
ArrayList<String> elements = new ArrayList<>();
System.out.print("Enter formula: ");
String formula = sc.next();
String s = "";
for (int i=0; i<formula.length(); i++) {
    if (Character.isUpperCase(formula.charAt(i))) {
        if (!s.isEmpty()) {
            elements.add(s);
        }
        s = "" + formula.charAt(i);
    } else {
        s += formula.charAt(i);
    }
}
elements.add(s);
for (int i=0; i<elements.size(); i++) {
    System.out.print(elements.get(i) + " ");
}
System.out.println();
}

这可以通过多种方式完成。其中之一是使用正则表达式。在这种情况下,表达式查找大写字符,后跟小写字符(可选),后跟数字(可选)。

Pattern elementPattern = Pattern.compile("(\p{Upper}\p{Lower}?)(\p{Digit}*)");

这可用于查找输入中的所有元素:

Matcher elementMatcher = elementPattern.match(input);
while (elementMatcher.find()) {
    String element = elementMatcher.group(1);
    String count = elementMatcher.group(2);
    System.out.println("Element: " + element + " count: " + count);
}

最新更新