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しています。