2016-04-28 10 views
0

NaCl2のようにユーザーの化学式を入力として取り、個々の要素とそれに関連付けられた数に分けるプログラムを作成する必要があります。文字列を解析し、NaCl2のように個々の要素をNaとCl2にペアにする方法はありますか?化学式解析

+0

は、それぞれのカチオン/アニオンは(-2)のNaに変わると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

これは、いくつかの方法を行うことができます。そのうちの1人は正規表現を使用しています。この場合、式は大文字を検索し、オプションで小文字が続き、オプションで数字が続きます。

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