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 // 今後ソースの整頓をする予定 -WIP-
30 public void run(String par1) {
31 char[] var2 = par1.toCharArray(); // par1のchar配列
32 String var3 = null; // setAtomの第一引数に送る
33 int var4 = 0; // setAtomの第二引数に送る
35 Formula var6 = null; // Formula格納用
37 for (int i = 0; i < var2.length; i++) {
38 if (Character.isLetter(var2[i])) {
39 if (Character.isUpperCase(var2[i])) {
44 this.setAtom(var3, var4 * var5);
45 } else if (var6 != null) {
46 this.setAtoms(var6.getAtoms(), var6.getAmonts(), var4 * var5);
49 var3 = Character.toString(var2[i]);
51 var3 = var3.concat(Character.toString(var2[i]));
54 } else if (Character.isDigit(var2[i])) {
55 if (var3 != null || var6 != null) {
56 var4 = var4 * 10 + Integer.valueOf(Character.toString(var2[i]));
58 var5 = Integer.valueOf(Character.toString(var2[i]));
60 } else if (var2[i] == '・') {
62 this.setAtom(var3, var4 * var5);
63 } else if (var6 != null) {
64 this.setAtoms(var6.getAtoms(), var6.getAmonts(), var4 * var5);
70 } else if (var2[i] == '(') {
72 this.setAtom(var3, var4 * var5);
76 int var7 = par1.indexOf(')');
77 String var8 = par1.substring(i + 1, var7);
78 var6 = new Formula(var8);
81 throw new IllegalArgumentException();
88 this.setAtom(var3, var4 * var5);
92 public boolean isAtom(String par1) {
93 for (String var2:ChemiCraftData.ATOMSLIST) {
94 if (par1.equalsIgnoreCase(var2)) {
101 public void setAtom(String par1, int par2) {
103 int var3 = this.atoms.indexOf(par1);
105 this.atoms.add(par1);
106 this.amonts.add(par2);
108 this.amonts.set(var3, this.amonts.get(var3) + par2);
111 throw new IllegalArgumentException();
115 public void setAtom(String par1, char par2) {
116 setAtom(par1, Integer.valueOf(Character.toString(par2)));
119 public void setAtoms(String[] par1, Integer[] par2) {
120 setAtoms(par1, par2, 1);
122 public void setAtoms(String[] par1, Integer[] par2, int par3) {
123 if (par1.length != par2.length) {
124 throw new IndexOutOfBoundsException();
126 for (int i = 0; i < par1.length; i++) {
127 this.setAtom(par1[i], par2[i] * par3);
131 public String[] getAtoms() {
132 return atoms.toArray(new String[atoms.size()]);
135 public Integer[] getAmonts() {
136 return amonts.toArray(new Integer[amonts.size()]);