首页 > 解决方案 > 搜索字符串中的数字。爪哇

问题描述

我需要在从用户输入中读取的公式中找到所有化学元素的总质量。并将公式中所有元素的质量总和输出到控制台。例如用户输入: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 方法。

标签: java

解决方案


推荐阅读