다른 기관과 연계 업무를 하던 중
타 기관에서 보내온 파일에 문제가 있어 잘 동작하던 배치에 문제가 생겼다.
정확히 배치 자체의 문제라기 보다는
애초에 서로 약속된 레이아웃으로 데이터를 보내주지 않은 타기관의 문제이었지만
그 레이아웃 정의서만 믿고
예외 상황을 처리하지 않은 배치도 문제라면 문제다.
문제는 간단했다.
원래 '횟수' 로 넘어와야 할 데이터에 숫자 이외의 문자가 끼어 들었다는 것이다.
'횟수'라는 이름에서 알 수 있듯이 해당 데이터는 숫자로만 구성된 문자열이다.
따라서 숫자 이외에 문자가 들어 있다면 예외를 발생시키거나
다른 동작을 시켜 주면 된다.
타기관에서 넘어오는 데이터는 텍스트 파일로 되어 있어
읽어 들이는 모든 데이터는 String 타입이다.
String 에서 써먹을 수 있는 방법은 크게 두가지가 있을 수 있는데
하나는 데이터를 한 글자 한 글자씩 쪼개어 해당 글자가 숫자인지 아닌지 판별하는 것이다.
즉 한글자 한글자 반복문을 돌면서 if 문으로 비교해 처리 하는 것이다.
또 하나의 방법은 String 클래스에서 제공하는 matches 메소드를 사용하는 것이다.
여러모로 String클래스의 matches를 사용하는 것이 좋다. 첫번째 방법은 너무나 비효율 적이다.
코드면에서도 문제지만 속도면에서도 matches를 쓰는 것이 훨씬 좋다.
따라서 이번 문제는 아래와 같은 간단한 메소드를 만들어 숫자만 들어와야 하는 데이터를 체크할 때 사용 하도록 할 수 있다.
private int checkNum(String strNum) {
int num = 0;
if(!strNum.trim().matches("^[0-9]+$")){
num = 9999;
} else {
num = Integer.parseInt(strNum.trim());
}
return num;
}
문자를 체크하는 부분에는 정규표현식을 사용했다.
0~9 사이의 숫자가 아니면 무조건 9999 를 반환하도록 한다.
숫자이면 Integer.parseInt() 함수를 사용해 문자열을 숫자로 바꾸어 반환한다.
'개발 > JAVA, Spring' 카테고리의 다른 글
[JAVA] Util 클래스에서 세션 사용하기 (0) | 2021.08.02 |
---|---|
[JAVA] 문자열에서 숫자만 남기고 제거하기 (replaceAll) (0) | 2021.06.16 |
[JAVA] 한글이 포함된 문자열 자르기 (0) | 2021.05.13 |
Spring Security 적용 후 이유없이 Access Denied 될때 (0) | 2021.01.30 |
No qualifying bean of type '...' available (0) | 2020.12.08 |