티스토리 뷰

 

1. ChoiceFormat : 특정 범위에 속하는 값을 문자열로 변환해준다. 

 int 성적을 해당 grade 문자로 출력하기 

double[] limits = {60,70,80,90}; //반드시 오름차순 
//범위의 경계값 저장하는 배열 
String[] grades = {"D","C","B","A"}; //limits와 grades의 순서와 개수 맞추기
//그러지 않으면 IllgegalArgumentException 발생
//범위에 포함된 값을 치환할 문자열 저장 

int[] scores = {100,95,88,70,52,60,70};
ChoiceFormat form = new ChoiceFormat(limits,grades);
		
for(int i=0; i<scores.length;i++) {
	System.out.println(scores[i]+":"+form.format(scores[i]));
}

여기서 중요한 이 두 배열은 범위의 경계값과, 해당 범위에 포함된 값을 치환할 문자열이다.

double[] limits = {60,70,80,90}; //범위의 경계값 -> 반드시 오름차순 
String[] grades = {"D","C","B","A"}; //범위에 포함된 값을 치환할 문자열 

* 경계값은 반드시 오름차순으로 정의가 되어있어야 하며, 문자열과 경계값 배열은 항상 순서와 개수를 맞추어 주어야한다.

그리고  ChoiceFormat의 인스턴스 메서드인 format에 치환하고자 하는 값을 매개변수로 넣어준다.

 

 

그리고 위의 경계값 배열과 치환 문자열은 아래와 같이 String 패턴으로 간결하게 처리 가능하다.

String pattern ="60#D|70#C|80<B|90#A";
//double[] limits = {60,70,80,90};
//String[] grades = {"D","C","B","A"}; 을 한번에 처리 

int[] scores = {100,95,88,70,52,60,70};		
ChoiceFormat form = new ChoiceFormat(pattern);

 pattern 에서 구분자 #은 경계값을 범위에 포함시키지만, <은 포함시키지 않는다. 

 

 

2. MessgaeFormat : 데이터를 정해진 양식에 맞게 출력할 수 있도록 한다. 

데이터가 들어갈 자리를 마련해놓은 양식을 미리 작성하고, 프로그램을 이용해서 다수의 데이터를 같은 양식으로 출력 시 사용하기 좋다.

String msg = "Name: {0} \nTel: {1} \nAge:{2} \nBirthDay:{3}";
//MessageFormat에 사용할 양식 문자열 -> {숫자} 로 표시된 부분이 데이터가 출력될 자리 
Object[] arguments=  //객체배열이므로 String 외에도 다른 객체들이 지정될 수 있다.
 {
 	"메이브" , "1234-5678", "23", "01-18"	
 };
 		
 String result = MessageFormat.format(msg, arguments); //msg형태로 arguments를 String에 저장 
 System.out.println(result);
}

Object argument에 저장된 데이터를 format 메서드를 통해 msg의 양식으로 저장한다.

 

String tableName="CUST_INFO";
String msg ="INSERT INTRO "+tableName+" VALUES (''{0}'',''{1}'',''{2}'',''{3}'');";
		
Object[][] arguments= {
		{"메이브","1234-5678","23","01-18"},
		{"오티스", "5678-1234", "22", "07-05"}
};
		
for(int i=0; i<arguments.length;i++) {
	String result=MessageFormat.format(msg, arguments[i]);
	System.out.println(result);}

여기서는 반복문으로 하나 이상의 데이터 집합을 정해진 msg 양식으로 출력한다.  이는 다수의 데이터를 데이터베이스에 저장하기 위한 Insert문으로 변환하는 경우 등에 사용하면 좋다.

 

- 파싱 : 필요한 데이터만 패턴을 통해서  추출 

String[] data = { //String 데이터 집합 
		"INSERT INTRO CUST_INFO VALUES ('메이브', '1234-5678', 23, '01-18');",
		"INSERT INTRO CUST_INFO VALUES ('오티스', '5678-1234', 22, '07-05');"
};
		
String pattern = "INSERT INTRO CUST_INFO VALUES ({0},{1},{2},{3});";
//파싱할 형식  필요한 데이터만 파싱된다. 
MessageFormat mf = new MessageFormat(pattern); //MessageFormat 인스턴스 생성 
		
for(int i=0; i< data.length;i++) {
	Object[] objs = mf.parse(data[i]); //파싱한 결과를 Object 객체에 저장 
	for(int j =0; j<objs.length;j++) {
		System.out.print(objs[j]+","); //출력 
	}
	System.out.println();
}

//결과 : 
'메이브', '1234-5678', 23, '01-18',
'오티스', '5678-1234', 22, '07-05',

이전 예제는 데이터 -> 양식에 삽입하여 -> 해당 양식의 형태로 출력 했으나, 

위 예제는 parse(String Source)를 이용해서, 출력된 데이터로부터 필요한 데이터 (스트링 소스에 저장된 패턴)만 추출하는 방법이다. 

 

마지막 예시는 데이터를 객체 배열에 초기화하는 것이 아니라, 파일로부터 데이터를 라인별로 읽어서 처리한다.

String tableName= "CUST_INFO";
String fileName = "data4.txt";
String msg = "INSERT_INFO "+ tableName + " VALUES ({0},{1},{2},{3});";
Scanner s = new Scanner(new File(fileName)); //스캐너로부터 파일 읽음 
		
String pattern = "{0},{1},{2},{3}"; //파싱 패턴 
MessageFormat mf = new MessageFormat(pattern);
		
while(s.hasNextLine()) {
	String Line = s.nextLine(); //파일에서 라인by라인으로 데이터 읽음 
	Object[] objs =mf.parse(Line); //해당 라인을 파싱해서 Object 객체에 저장 
	System.out.println(MessageFormat.format(msg, objs)); //msg 양식으로 출력 
}
s.close();

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함