化学方程式解析

时间:2016-04-28 03:28:19

标签: java regex

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

2 个答案:

答案 0 :(得分:0)

正如您在评论中提到的,检查字母是大写还是小写是这个问题的关键。您正在寻找解决此问题的方法是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();
}

答案 1 :(得分:0)

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

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