문자열 식 (예 : "6 + 10 * 2-5")을 구문 분석하고 for- case 문. 그러나 오류가 나타납니다 :java.lang.NumberFormatException : 입력 문자열 : 구문 분석 문자열 표현
Exception in thread "main" java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:470)
at java.lang.Integer.parseInt(Integer.java:499)
at Calculator.random(Calculator.java:50)
at Calculator.main(Calculator.java:210)
아이디어가 있으십니까?
public static double random(String exp) {
double primeResult = 0;
for (int i=0; i<exp.length();i++) {
double left = Integer.parseInt(exp.substring(0,i));
double right = Integer.parseInt(exp.substring(i+1,i+2));
switch(exp.charAt(i)) {
case '*':
primeResult = left * right;
break;
case '/':
primeResult = left/right;
break;
case '+':
primeResult = left + right;
break;
case '-':
primeResult = left - right;
break;
default:
return 0;
}
System.out.println(primeResult);
}
return primeResult;
}
}
그렇게하지 않으면, ScriptingEngine이 적은 수의 라인에서보다 안정적으로이를 수행 할 수 있습니다. – assylias
이 기술은 연산자 우선 순위를 처리하지 않기 때문에이 문제를 해결할 때라도 잘못된 대답을 제공한다는 것을 이해해야합니다. '(6+ (10 * 2)) - 5'보다는'((6 + 10) * 2) -5'로 평가할 것입니다. 기본적으로 여기에 '문자열 식을 구문 분석하려는'설명에 해당하는 것이 없습니다. 당신이하는 일은 잘못 스캔하는 겁니다. '재귀 적 하강 표현 구문 분석 ', Dijkstra'shunting-yard algorith '등을 찾아 보거나 @assylias가 제안하는대로'ScriptingEngine'을 사용해야합니다. – EJP