자바 스택을 이용한 괄호 체크 하는 메소드 입니다.
public static boolean bracketsBalance (String exp) {
ArrayStack stk = new ArrayStack(exp.length() +1);
for (int i = 0; i < exp.length(); i++) {
char ch = exp.charAt(i);
//시작괄호 이면 스택에 넣음
if ( ch== '[' || ch == '(' ) {
stk.push( new Character(ch));
}
else if(ch == ']' || ch == ')') {
//파싱중 우측괄호를 봤는데, 스택이 비어있다면 오류
if (stk.isEmpty()) return false;
ArrayStack stk = new ArrayStack(exp.length() +1);
for (int i = 0; i < exp.length(); i++) {
char ch = exp.charAt(i);
//시작괄호 이면 스택에 넣음
if ( ch== '[' || ch == '(' ) {
stk.push( new Character(ch));
}
else if(ch == ']' || ch == ')') {
//파싱중 우측괄호를 봤는데, 스택이 비어있다면 오류
if (stk.isEmpty()) return false;
//우선 스택에서 하나를 꺼낸다.
char charFromStack = ((Character)stk.pop()).charValue();
// 파싱한것이 ‘(‘ 인데 스택에서 꺼낸것이 ‘)’ 아니거나,
// 파싱한것이 ‘[’ 인데 스택에서 꺼낸것이 ‘]’ 아닌경우
if ( ch == ']' && charFromStack != '['
|| (ch == ')' && charFromStack != '(') )
return false;
} // end if
} // end for loop
return stk.isEmpty(); //empty means matched, else unmatched
}
char charFromStack = ((Character)stk.pop()).charValue();
// 파싱한것이 ‘(‘ 인데 스택에서 꺼낸것이 ‘)’ 아니거나,
// 파싱한것이 ‘[’ 인데 스택에서 꺼낸것이 ‘]’ 아닌경우
if ( ch == ']' && charFromStack != '['
|| (ch == ')' && charFromStack != '(') )
return false;
} // end if
} // end for loop
return stk.isEmpty(); //empty means matched, else unmatched
}
댓글 없음:
댓글 쓰기