저는 java로 계산기를 만들려고합니다. 그것을 빌드하기 위해, 나는 각 정수를 배열로 분할해야합니다. split("\\+")
을 사용하여 "+"부호 앞뒤의 각 정수를 나눕니다.1 + 2-3/4처럼 문자열을 나누는 방법
하지만 다른 연산자는 어떻습니까? "+"를 사용하는 동안 "-", "/", "*"를 사용할 수 있습니까?
저는 java로 계산기를 만들려고합니다. 그것을 빌드하기 위해, 나는 각 정수를 배열로 분할해야합니다. split("\\+")
을 사용하여 "+"부호 앞뒤의 각 정수를 나눕니다.1 + 2-3/4처럼 문자열을 나누는 방법
하지만 다른 연산자는 어떻습니까? "+"를 사용하는 동안 "-", "/", "*"를 사용할 수 있습니까?
당신은 당신이 여러 자리의 숫자와 음수 내가 구문 분석하는 enum based state machine를 사용했던 과거 -1+-2
을 즉, 원하는 경우 간단한 파서를 작성해야
for(char ch : "1+2-3/4".toCharArray()) {
System.out.println(ch);
}
사용할 수 있습니다 테스트. 토큰 스트림이 있으면 우선 순위 규칙을 작성할 수 있습니다.
감사합니다! 그러나 나는 전에 시험했다. 예를 들어, 사용자는 방정식을 "12 + 3-4"로 입력합니다. char로 1과 2로 나눌 수 있지만, 우리의 경우에는 12를 얻어야합니다.하지만 어쨌든, 도움을 주셔서 감사합니다. 나는 정말로 그것을 바르게 평가했다! – user1860742
왜 파서가 그들을 결합해야하는지. ;) 음수인지 음수인지 모르기 때문에'-'로 나눌 수 없습니다. –
확인. 그래서 이걸로 나를 도울 수 있니? 연산자 우선 순위를 처리하는 방법)) – user1860742
글쎄, 당신의 즉각적인 질문에 대답 (당신은 \\
일부 사업자를 탈출해야) : 당신이 더 정교한 뭔가가 필요하므로
"1+2-3/4".split("[+\\-*/]")
그러나 이것은 연산자를 삭제합니다. 또한 부동 소수점 숫자를 지원할 수도 있습니다. 마지막으로, 구문 분석이 끝나면 연산자 우선 순위를 기억하십시오.
이 경우당신은 문자 클래스의 시작 부분으로'-'를 옮기고 싶거나 그것을 벗어나기를 원할 것입니다. 그렇지 않으면'+'에서'/'까지의 범위로 해석됩니다. 문자 클래스 안에있는 경우'+'또는'*'를 이스케이프 할 필요도 없습니다. –
@ F.J : 감사합니다. 나는 또한 그것이 특별한 인물이라는 것을 잊었습니다. 정규 표현식에 대해 배울 점이 많습니다. –
예, 문자 클래스로 이스케이프 규칙이 어떻게 변경되는지 기억하기가 까다로울 수 있습니다. –
문제 영역을 계산기로 언급 했으므로 스택을 사용하여 피연산자와 연산자를 분리하고 표현식을 평가하는 것이 더 적절하다고 생각합니다.
확인`A` 자바의 많은 이러한 경우
--->here에 사용 된 유명한 알고리즘? –
음, 문자열을 분할하는 것 이상의 의미가 있다는 것을 이해하십시오. 우선 순위도 고려해야합니다. –
StackOverflow에 오신 것을 환영합니다! 너 뭐 해봤 니? 오류가 무엇입니까? –