1 package pcc.chemicraft.util;
3 import java.util.ArrayList;
5 import pcc.chemicraft.ChemiCraftData;
8 * 化学式から元素と数を取り出してArrayListに格納します。
11 public class Formula {
13 private ArrayList<String> atoms = new ArrayList<String>();
14 private ArrayList<Integer> amonts = new ArrayList<Integer>();
16 public Formula(String par1) {
20 public Formula(String[] par1, Integer[] par2) {
21 this.setAtoms(par1, par2);
24 public Formula(ArrayList<String> par1, ArrayList<Integer> par2) {
29 public void run(String par1) {
30 char[] var2 = par1.toCharArray();
36 for (int i = 0; i < var2.length; i++) {
37 if (Character.isLetter(var2[i])) {
38 if (Character.isUpperCase(var2[i])) {
43 this.setAtom(var3, var4 * var5);
44 } else if (var6 != null) {
45 this.setAtoms(var6.getAtoms(), var6.getAmonts(), var4 * var5);
48 var3 = Character.toString(var2[i]);
50 var3 = var3.concat(Character.toString(var2[i]));
53 } else if (Character.isDigit(var2[i])) {
54 if (var3 != null || var6 != null) {
55 var4 = var4 * 10 + Integer.valueOf(Character.toString(var2[i]));
57 var5 = Integer.valueOf(Character.toString(var2[i]));
59 } else if (var2[i] == '・') {
61 this.setAtom(var3, var4 * var5);
62 } else if (var6 != null) {
63 this.setAtoms(var6.getAtoms(), var6.getAmonts(), var4 * var5);
69 } else if (var2[i] == '(') {
71 this.setAtom(var3, var4 * var5);
75 int var7 = par1.indexOf(')');
76 String var8 = par1.substring(i + 1, var7);
77 var6 = new Formula(var8);
80 throw new IllegalArgumentException();
84 this.setAtom(var3, var4 * var5);
88 public boolean isAtom(String par1) {
89 for (String var2:ChemiCraftData.ATOMSLIST) {
90 if (par1.equalsIgnoreCase(var2)) {
97 public void setAtom(String par1, int par2) {
99 int var3 = this.atoms.indexOf(par1);
101 this.atoms.add(par1);
102 this.amonts.add(par2);
104 this.amonts.set(var3, this.amonts.get(var3) + par2);
107 throw new IllegalArgumentException();
111 public void setAtom(String par1, char par2) {
112 setAtom(par1, Integer.valueOf(Character.toString(par2)));
115 public void setAtoms(String[] par1, Integer[] par2) {
116 setAtoms(par1, par2, 1);
118 public void setAtoms(String[] par1, Integer[] par2, int par3) {
119 if (par1.length != par2.length) {
120 throw new IndexOutOfBoundsException();
122 for (int i = 0; i < par1.length; i++) {
123 this.setAtom(par1[i], par2[i] * par3);
127 public String[] getAtoms() {
128 return atoms.toArray(new String[atoms.size()]);
131 public Integer[] getAmonts() {
132 return amonts.toArray(new Integer[amonts.size()]);