我必须编写一个程序,将用户的化学方程式作为输入,例如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);
}