2012-11-28 3 views
-1

저는 java로 계산기를 만들려고합니다. 그것을 빌드하기 위해, 나는 각 정수를 배열로 분할해야합니다. split("\\+")을 사용하여 "+"부호 앞뒤의 각 정수를 나눕니다.1 + 2-3/4처럼 문자열을 나누는 방법

하지만 다른 연산자는 어떻습니까? "+"를 사용하는 동안 "-", "/", "*"를 사용할 수 있습니까?

+0

--->here에 사용 된 유명한 알고리즘? –

+0

음, 문자열을 분할하는 것 이상의 의미가 있다는 것을 이해하십시오. 우선 순위도 고려해야합니다. –

+2

StackOverflow에 오신 것을 환영합니다! 너 뭐 해봤 니? 오류가 무엇입니까? –

답변

0

당신은 당신이 여러 자리의 숫자와 음수 내가 구문 분석하는 enum based state machine를 사용했던 과거 -1+-2

을 즉, 원하는 경우 간단한 파서를 작성해야

for(char ch : "1+2-3/4".toCharArray()) { 
    System.out.println(ch); 
} 

사용할 수 있습니다 테스트. 토큰 스트림이 있으면 우선 순위 규칙을 작성할 수 있습니다.

+0

감사합니다! 그러나 나는 전에 시험했다. 예를 들어, 사용자는 방정식을 "12 + 3-4"로 입력합니다. char로 1과 2로 나눌 수 있지만, 우리의 경우에는 12를 얻어야합니다.하지만 어쨌든, 도움을 주셔서 감사합니다. 나는 정말로 그것을 바르게 평가했다! – user1860742

+0

왜 파서가 그들을 결합해야하는지. ;) 음수인지 음수인지 모르기 때문에'-'로 나눌 수 없습니다. –

+0

확인. 그래서 이걸로 나를 도울 수 있니? 연산자 우선 순위를 처리하는 방법)) – user1860742

2

글쎄, 당신의 즉각적인 질문에 대답 (당신은 \\ 일부 사업자를 탈출해야) : 당신이 더 정교한 뭔가가 필요하므로

"1+2-3/4".split("[+\\-*/]") 

그러나 이것은 연산자를 삭제합니다. 또한 부동 소수점 숫자를 지원할 수도 있습니다. 마지막으로, 구문 분석이 끝나면 연산자 우선 순위를 기억하십시오.

이 경우
+0

당신은 문자 클래스의 시작 부분으로'-'를 옮기고 싶거나 그것을 벗어나기를 원할 것입니다. 그렇지 않으면'+'에서'/'까지의 범위로 해석됩니다. 문자 클래스 안에있는 경우'+'또는'*'를 이스케이프 할 필요도 없습니다. –

+0

@ F.J : 감사합니다. 나는 또한 그것이 특별한 인물이라는 것을 잊었습니다. 정규 표현식에 대해 배울 점이 많습니다. –

+0

예, 문자 클래스로 이스케이프 규칙이 어떻게 변경되는지 기억하기가 까다로울 수 있습니다. –

0

문제 영역을 계산기로 언급 했으므로 스택을 사용하여 피연산자와 연산자를 분리하고 표현식을 평가하는 것이 더 적절하다고 생각합니다.

확인`A` 자바의 많은 이러한 경우

관련 문제