본문 바로가기
Programming Language 이해하기/Java 이해하기

Character.isDigit() 의 반란...!

by simplify-len 2021. 2. 26.

  사내 서비스를 유지보수하던 중에 있었던 황당한 일이였습니다.

Solr 쿼리에 쿼리로서 q를 보내는 중에 숫자 -999 는 자꾸 잘못된 값이라는 버그가 발생.

해당 함수는 아래와 같다.

private Literal scanNumber() {
        StringBuffer sb = new StringBuffer();

        while (scanner.hasNext()) {
            char ch = scanner.next();
            if (!Character.isDigit(ch)) {
                scanner.backward();
                break;
            }
            sb.append(ch);
        }

        if (sb.length() <= 0) {
            throw new QueryParseException("expected digit but not.");
        }

        return new Literal(new Token(TokenType.NUMBER, sb.toString()));
    }

자칫하면, 해당 함수가 숫자를 판단할 수 있다고 빋을 수 있지만, 정답은 땡..!!

-999는  '-' 때문에 숫자로 판단하지 않는다!

조심하자!

댓글