미운 오리 새끼의 우아한 개발자되기

[자바의 정석]MessageFormat 본문

Java/Java 기본기

[자바의 정석]MessageFormat

Serina_Heo 2022. 2. 20. 13:13

데이터를 정해진 양식에 맞게 출력할 수 있도록 도와주는 MessageFormat이 있다. 예를 들어, 고객들에게 보낼 안내문을 출력할 때, 안내문 양식에 받는 사람의 이름과 같은 데이터만 달라지도록 할 때 사용된다. 그리고 parse를 이용하면 지정된 양식에서 필요한 데이터만 손쉽게 추출할 수도 있다. 

개인적으로 실무에서는 고객 안내 이메일이나, 문자메세지 혹은 로그 찍을 때 사용했던 기억이 있다. 알아두면 편리해서 기록해본다.

import java.text.MessageFormat;

public class MessageFormatEx1 {
    public static void main(String[] args) {
        String msg = "Name: {0} \nTel: {1} \nAge: {2} \nBirthday: {3}";
		// arguments의 인덱스 0부터 msg의 {숫자} 안에 들어간다.
        
        Object[] arguments = {
                "이자바", "02-123-4567", "29", "08-06"
        };

        String result = MessageFormat.format(msg, arguments);

        System.out.println(result);
    }
}

 

MessageFormat의 생성자에 String pattern이 들어가는 경우에 대한 java doc 설명은 아래와 같다.

Constructs a MessageFormat for the default FORMAT locale and the specified pattern. The constructor first sets the locale, then parses the pattern and creates a list of subformats for the format elements contained in it. Patterns and their interpretation are specified in the class description.

import java.text.MessageFormat;

public class MessageFormatEx3 {
    public static void main(String[] args) throws Exception {
        String[] data = {
                "INSERT INTO CUST_INFO VALUES ('이자바', '02-123-1234', '24', '02-22');",
                "INSERT INTO CUST_INFO VALUES ('김프로', '02-333-2222', '22', '02-11');",
        };

        String pattern = "INSERT INTO CUST_INFO VALUES ({0}, {1}, {2}, {3});";
        MessageFormat mf = new MessageFormat(pattern);

        for(int i=0; i < data.length; i++) {
            // parse를 통해 pattern에서 필요한 데이터만 추출할 수 있다.
            Object[] objs = mf.parse(data[i]);
            for(int j=0; j < objs.length; j++) {
                System.out.print(objs[j] + ",");
            }
            System.out.println();
        }
    }
}

 

예제 코드 ref: 자바의 정석 3판 예제 10-18, 10-20