개발하면서/etc

MessageFormat & split 생각해보기

오산돌구 2010. 10. 14. 00:47
반응형

요새 자바로 개발을 하고있는데 제목과 같이 두개를 사용할 기회가 있었다.

시시하지만 그저 남기고 싶어서 이렇게 글을 쓴다.

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

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를 바꾸는것을 필드 위치번호로 변경만 해주면된다.
'로 하면 문자로 인식하기때문에 '' (' 두개)로 해야한다는것에 주의~!!ㅋㅋ

다시 한번 느끼지만 삶에 도움이 되지 않는 배움은 없다. 그리고 배움은 실제 경험해볼때 빛을 발하는것같다.

반응형