[작업내용]

...더보기

파일을 읽어서 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() + "]");

 

+ Recent posts