[작업내용]
파일을 읽어서 DB에 넣을 때 특정 컬럼의 값이 Not Null 일 때 다른 컬럼의 값에 특정 문자열을 추가 하는 작업
ex) A 컬럼의 값이 존재 -> B 컬럼에 "이득" 문자열 추가 삽입
[문제]
Not Null 값으로 보이는 컬럼 값을 DB가 값이 있는 것으로 판단하여 특정 문자열을 추가하는 현상
[원인 파악]
해당 파일에서 특정 컬럼에 들어가는 내용을 모두 읽어 String의 값에 length를 확인
* 문제의 값의 length는 1로 출력됨
* 눈으로 판단하기에는 \t으로 보이는 값이 출력되고 있음
* trim()으로 처리 하려고 했으나 trim() 또는 replaceAll(" ", "")로 처리가 안됨
문자열이 특수한 값인지 파악하기 위하여 str.chatAt(0)의 값을 형변환 한 뒤 출력
* 출력된 값은 12288
* 12288이란 값은 cjk 문자셋에서 나타나는 IDEOGRAPHIC SPACE라 불리는 유니코드 \u3000 또는 HTML 표현으로는   이라는 문자로 폰트 지원이 없으면 눈에 보이지 않는 코드로 존재
[해결 방법]
현 상황에서 해결한 방법은 몇 가지 가정을 기반으로 작업하였다.
* 현 상황에서는 특수 문자가 컬럼 내에 하나만 존재한다.
* 문자열 사이에는 존재하지 않는다.
* 이 작업을 했을 경우 예상되는 이슈
- 특정 파일의 값을 개발자가 임의로 수정하는 경우이기 때문에 모든 값을 알지 못하면 의도하지 않은 값이 수정될 수 있다.
String whatTheString = " ";
System.out.println("[LOG] [SpecialWord:" + whatTheString.length() + "]");
/* trim() 처리 시도 */
System.out.println("[LOG] [Trim(): " + whatTheString.trim() + "]["+ whatTheString.trim().length() + "]");
/* 문자열 확인 (12288의 값이 출력) */
int whatInt = whatTheString.charAt(0);
System.out.println("[LOG] [charAt(0):" + whatInt + "]");
/* 모든 문자열의 공백을 제거 */
String replaceAllStr = whatTheString.replaceAll("\\p{Z}", "");
System.out.println("[LOG] [replaceAll:" + replaceAllStr + "]");
/* 문자열 처음과 끝에 내용만 없애기 */
String replaceStr = whatTheString.replaceAll("(^\\p{Z}+|\\p{Z}+$)", "");
System.out.println("[LOG] [replaceAll(regExp):" + replaceStr + "][" + replaceStr.length() + "]");
'Basic > Java' 카테고리의 다른 글
[Study - Java] Chapter 16 네트워킹(Networking) (0) | 2017.10.14 |
---|---|
[Study - Java] Chapter 15 입출력(I/O) (0) | 2017.10.14 |
[Study - Java] Chapter 13 스레드 (0) | 2017.10.14 |
[Study - Java] Chapter 12 제네릭, 열거형, 어노테이션 (0) | 2017.10.14 |
[Study - Java] Chapter 11 컬렉션프레임워크 (0) | 2017.10.14 |