[Java] 문자열이 숫자인지 확인하는 방법

DYKO·2023년 5월 12일
2

Coding Note

목록 보기
3/4

정리하게 된 배경 TMI~

항공권 예약 시, 항공사에서 준 PNR(숫자+알파벳)이라는 정보를 받는데 GDS에 따라 항공사PNR 외에 8자리 숫자로 된 PNR예약번호가 들어오는 경우가 존재한다. 실제 운영팀에서는 항공사PNR을 기준으로 데이터를 보는 경우가 많은데, 백오피스에선 두 PNR 정보가 분리되지 않고 PNR1, PNR2로 순서가 뒤섞여서 적재가 되고 있었다.
요런 배경에서 정산 시스템에선 해당 PNR을 분리하려고 했는데 아무 생각 없이 Double.parse()로 숫자인지 판단하도록 했다. 근데 웬걸... 항공사PNR이 숫자로 인식되어서 잘못 들어가 있네... 해서 이 김에 문자열이 숫자인지 검증하는 방법을 정리해봤다.

Double.parseDouble() 메소드 try-catch

    public boolean isNumberic(String str) {
    	try {
    	  Double.parseDouble(str);
      } catch (NumberFormatException e) {
    	  return false;
      }
      return true;
    }

하지만, D나 E 문자가 들어갈 경우 Double로 형변환이 되어 버그 발생할 수 있음

String.matches() 메서드 활용

정규식을 활용해 숫자형식인지 활용

    public static boolean isNumberic(String str) {
        return str.matches("[+-]?\\d*(\\.\\d+)?");
      }

Character 클래스의 .isDigit() 메서드 활용

  • Java 8 미만
    public boolean isNumberic(String str) {
    	boolean result = true;
    	for(char c : str.toCharArray()){
    		if(!Character.isDigit(c) {
    			result = false;
    			break;
    		}
    	}
    	return result;
    }
  • Java 8 이상
    public static boolean isNumberic(String str) {
        return str.chars().allMatch(Character::isDigit);
      }

정리

굳이 Double형식(ex. 5d, 5e..) 인 데이터까지 구분해야 할 필요가 없으면 Character 클래스나 정규식을 활용하자.

profile
엔지니어가 되는 그 날 까지!

0개의 댓글