MessageFormat & split 생각해보기
요새 자바로 개발을 하고있는데 제목과 같이 두개를 사용할 기회가 있었다.
시시하지만 그저 남기고 싶어서 이렇게 글을 쓴다.
Split
public class Test {
public static void main(String[] args) {
String input = "kang#@sdasfd#@asasf#@#@asdfs#@#@";
String name[];
name = input.split("#@");
for (String buf: name){
System.out.println("split:" + buf);
}
}
}
실행하면 결과가 name이 6개 할당될줄알았는데 아니었다.
마지막은 처리하지 않는다~
굳이 마지막은 안한다는 연산을 왜 했는지 궁금하다....(이부분 아시는 분있으시면 알려주세요~~)
MessageFormat
팀에서 사용하기위해 기존에 DB데이타 가져오는 모듈을 조금 개선하는 작업을 하고있다.
아래와 같은 기능을 하고있다.
java -jar DBManager2010.jar oracleDB.conf "insert into DBTEST values('<#id>;', '<#name>;', '<#grade>;')" -uf input.txt
이렇게 하면
실행되는 쿼리문은 아래와 같다.
insert into DBTEST values('1', '날리지큐브', '00111')
insert into DBTEST values('2', '검색연구소', '1733')
......
.......
insert into DBTEST values('5', '이주호', '3531')
<#~~~>; 이부분을 %s로 치환을 한후 String배열에 실제 데이타를 순서에 맞게 저장하는걸로 만들기로했다.
만들고 보니.....음.......만약에 사용자가 <#~~>;사용을 30개정도 한다고 하면?
String.format(sql, value[0], value[1], value[2], value[3], value[4], value[5], value[6], value[7], value[8]....value[29]);
. . . 무식해 보인다.
MessageFormat 이 생각이 나서아래와 같이 작성했다.
public static void main(String[] args) {
String value[] = new String[5]; //input.txt을 읽어서 순서에맞게 저장되어있다고 가정
value[0] = "1"; value[1] = "날리지큐브";
value[2] = "00111";
String sql = "insert into DBTEST values('%s', '%s', '%s')";
sql = String.format(sql, value[0], value[1], value[2], value[3], value[4]);
System.out.println("Processing sql :" + sql);
}
오~~~ 좋다 ㅋㅋㅋㅋ
%s를 바꾸는것을 필드 위치번호로 변경만 해주면된다.
'로 하면 문자로 인식하기때문에 '' (' 두개)로 해야한다는것에 주의~!!ㅋㅋ
다시 한번 느끼지만 삶에 도움이 되지 않는 배움은 없다. 그리고 배움은 실제 경험해볼때 빛을 발하는것같다.