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