전위표현식 또는 후위표현식으로 하다 특정 계산에서 에러나는 부분이 많아

스크립트 엔진을 이용하여 자바스크립트를 사용하기로 했다.


Rhino가 필요

https://developer.mozilla.org/en-US/docs/Mozilla/Projects/Rhino/Download_Rhino


압축파일 내의 js.jar 파일을 프로젝트 라이브러리에 추가해준다



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
String string = "3×3÷3";
 
String tmp = string;
 
string = string.replaceAll("×", "*");
string = string.replaceAll("÷", "/");
 
Context rhino = Context.enter();
 
rhino.setOptimizationLevel(-1);
try {
    Scriptable scope = rhino.initStandardObjects();

    Object obj = rhino.evaluateString(scope, string, "JavaScript", 1, null);
    String result = obj.toString();
    mEditText.setText(tmp + "=" + result);
} finally {
    Context.exit();
}
 
cs


문자열을 입력받아 자바스크립트로 동작시킨다.


주의점은 Context가 org.mozilla.javascript.Context 이므로 android.content.Context를 사용할 때는 둘중하나를 풀 경로로 써줘야 한다는 점이다.


edittext에 자바스크립트를 입력하면 동작하게 되지만, 계산기만으로 쓸것이기때문에 edittext의 inputType을 number로 하고 기호들은 버튼으로만 입력받도록 하면 큰 문제는 없을 듯 하다. 

아니면 모두 버튼으로만 입력받게 textview로 만들던가...