java - 搜索字符串中的数字。爪哇
问题描述
我需要在从用户输入中读取的公式中找到所有化学元素的总质量。并将公式中所有元素的质量总和输出到控制台。例如用户输入:H2O 输出:18.02
程序正在 csv 文件“elements.csv”中寻找一个元素并将它们的质量相加。如果公式包含数字“2”,我只需第二次添加先前的元素质量。如果公式包含数字“3”,我只需将其乘以 2 并将其添加到总质量中。但我是用 if 和 if else 语句来做的。有更好的方法吗?
public static void main(String[] args) {
FindElementsWeight();
}
public static void FindElement(){
Scanner scn = new Scanner(System.in);
System.out.println("Enter a name of an element");
String elementsName = scn.next();
List<Elements> elementName = ElementsDAO.findElement(elementsName);
System.out.println(elementName);
}
public static void FindElementsWeight(){
Scanner scn = new Scanner(System.in);
System.out.println("Enter a formula");
String formula = scn.next();
List<String> el = new ArrayList();
Pattern r = Pattern.compile("A[cglmrstu]|B[aehikr]?|C[adeflmnorsu]?|D[bsy]|E[rsu]|F[elmr]?|G[ade]|H[efgos]?|I[nr]?|Kr?|L[airuv]|M[dgnot]|N[abdeiop]?|Os?|P[abdmortu]?|R[abefghnu]|S[bcegimnr]?|T[abcehilm]|U(u[opst])?|V|W|Xe|Yb?|Z[nr]|\\d|\\(|\\)");
Matcher matcher =r.matcher(formula);
while (matcher.find()) {
el.add(matcher.group());
}
double weight, sum = 0, previousElementweight = 0;
for (String s : el){
if(s.contentEquals("2")){
sum += previousElementweight;
} else if(s.contentEquals("3")){
sum += previousElementweight * 2;
}
weight = ElementsDAO.findElementsWeight(s);
previousElementweight = weight;
sum += weight;
}
System.out.println(sum);
}
public class ElementsDAO {
public static List<Elements> elements = new ArrayList();
static{
try {
Scanner scn = new Scanner(new FileReader("elements.csv"));
String[] headingline = scn.nextLine().split(","); //heading
while(scn.hasNext())
{
String[] line = scn.nextLine().split(",");
Elements e = new Elements(line[0], Integer.parseInt(line[1]), line[2], Double.parseDouble(line[3]));
elements.add(e);
}
} catch (FileNotFoundException ex) {
Logger.getLogger(ElementsDAO.class.getName()).log(Level.SEVERE, null, ex);
}
}
public static List<Elements> findElement(String name) {
List<Elements> finds = new ArrayList();
for(Elements e : elements){
if(e.getElement().equalsIgnoreCase(name)){
finds.add(e);
}
}
return finds;
}
public static double findElementsWeight(String symbol) {
List<Elements> finds = new ArrayList();
double weight = 0;
for(Elements e : elements){
if(e.getSymbol().equals(symbol)){
finds.add(e);
weight = e.getWeight();
}
}
return weight;
}
}
Allso 有一个 Elements 类,只有 getter、setter、contsructor 和 toString 方法。
解决方案
推荐阅读
- sql - 同一表上的多个联接但值不同
- git - 使用 git-externals 时,稀疏结帐不会在工作目录上留下任何条目
- java - Java字节码将整数推入堆栈-ICONST_5但没有ICONST_6?
- reactjs - 在 ReactJs 中使用 useState 钩子时如何确保获取最新的输入值
- c - 使用动态内存分配在c中获取未知大小的字符串的程序
- node.js - 测试运行完成后一秒钟 Jest 没有退出?
- javascript - 如何在图库图像上添加点击事件侦听器,当它们延迟加载时?
- flutter - 如何确定按下了哪个按钮 Flutter
- mysql - Google 表格脚本从填充的单元格返回 N/A
- python - 在python中重复调用批处理文件