2016-04-28 83 views
0

我必須編寫一個程序,將用戶的化學方程作爲輸入,如NaCl2,並將其分離爲單個元素和與其關聯的數字。有沒有辦法通過一個字符串解析並將各個元素(如NaCl2中的元素)配對成Na和Cl2?化學方程式解析

+0

豈不相應陽離子/陰離子變成娜(-2)和Cl(-1)。並相應地處理額外的離子。你可以將週期表硬編碼爲散列表或其他東西。 – Tdorno

+0

我還沒有嘗試過任何東西。我的想法是,如果一個字符是大寫字母,那麼它會啓動一個新元素,如果後面的那個字符是小寫字母,那就是元素的結尾,如果後面的字符是數字,它也與該元素配對,除非我還沒有學會幫助確定一個字符是大寫還是小寫。 –

回答

0

正如您在評論中提到的那樣,檢查字母是大寫還是小寫是此問題的關鍵。你想要解決這個問題的方法是Character.isUppercase()。你的代碼應該迭代輸入字符串中的字符並將每個字符傳遞給此方法。我寫了一個代碼的粗略草案來演示它(並且它也爲您打印輸出 - 多麼方便!):

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(); 
} 
+0

好的。新的信息。我必須通過我剛寫完的文本文件獲取每個元素的原子質量,然後,我必須計算分子量,然後將化合物和權重以及用戶名輸出到文本文件中。我可以使用我知道的掃描儀獲取他們的名字,但我不確定如何從文件讀取或寫入文件? @BethanyLouise –

+0

您可以使用FileWriter寫入文件。 https://docs.oracle.com/javase/7/docs/api/java/io/FileWriter.html在退出程序之前,您需要確保使用'close()'關閉它,否則文本文件將只是空的。要從文件中讀取,您可以簡單地使用從文件中讀取而不是從System.in中讀取的掃描器。每當你處理文件操作時,你還需要設置你的程序拋出一個IOException或者在try-catch語句塊中包含相關部分的代碼;如果您使用Netbeans這樣的IDE,它會提示您執行此操作。 –

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