2017.03.24
続・とってもわかりやすいJAVA 【サンプルプログラム9 文字列の式を計算してみよう】
今回は文字列で定義した式を解析し、その計算結果を求めてみたいと思います!
例えば、“1+2”という文字列から1+2を実行し3を求める、といったようなことを行います。
なかなか複雑なので、今回は計算する数字は2つだけとします。
主にStringクラスのメソッドを用いて作っていきますので、正規表現は使用しません。
また、本来であれば例外処理も書いた方がよいのですが、今回はソースを短くするため割愛しています。
みなさんも是非ご自身で作ってみてください!
ポイントは以下の通り
- 式から演算子を抽出する
- 演算子の前後をそれぞれ数字に変換する
- 演算子の種類に応じて計算処理を分岐させる
といったところでしょうか。
ではプログラムをみてみましょう!
■ParseAndCalcSample.java
public class ParseAndCalcSample {
public static void main(String[] args) {
String formula = "1/3"; // 計算式
System.out.println(parseAndCalc(formula));
}
static double parseAndCalc(String formula) {
char[] opes = { '+', '-', '*', '/' };
char ope = ' ';
int opeIdx = 0;
for (char o : opes) {
opeIdx = formula.indexOf(o);
if (opeIdx != -1) {
ope = formula.charAt(opeIdx);
break;
}
}
double x = Double.parseDouble(formula.substring(0, opeIdx));
double y = Double.parseDouble(formula.substring(opeIdx + 1,formula.length()));
double answer;
if (ope == '+') {
answer = x + y;
} else if (ope == '-') {
answer = x - y;
} else if (ope == '*') {
answer = x * y;
} else {
answer = x / y;
}
return answer;
}
}
■解説
8~17行目で使用されている演算子とインデックスを求めています。
19,20行目では演算子の前後の数をdouble型に変換しています。
割り算の場合を考えたらint型だと小数を表示できないですね。
文字列の一部を切り取るにはStringクラスに用意されているsubstringメソッドを使用します。
22~30行目で演算子に応じた計算結果をreturnしています。