본문 바로가기

프로그래밍언어/JAVA

[JAVA] Format 클래스

반응형

자바에는 숫자나 날짜 등을 어떤 형식으로 출력할지를 지정할 수 있도록 다양한 형식화 클래스들을 가지고 있다. 이런 형식화 클래스들을 사용하면 문자, 숫자, 날짜 등의 데이터를 원하는 형식으로 출력할 수 있다.

 

 

1. DecimalFormat

 

DecimalFormat 은 숫자를 형식화 하는 클래스이다. DecimalFormat 을 이용하면 숫자 데이터를 정수, 부동소수점, 금액 등 다양한 형식으로 표현할 수 있으며, 반대로 일정한 형식의 텍스트를 숫자로 변환할 수 있다.

 

형식화 클래스에서는 해당 형식을 패턴을 사용하여 표현하는데, 패턴에 사용되는 기호와 설명은 다음과 같다.

 

 

기호 설명 패턴 예시 (값 1234567.89)
0 10진수 (기본값 0) 0
0.0
0000000000.0000
1234568
1234567.9
0001234567.8900
# 10진수 #
#.#
##########.####
1234568
1234567.9
1234567.89
. 소수점 #.# 123456.7
- 음수부호 #.#-
-#.#
123.45-
-123.45
, 단위 구분자 #,###,### 1,234,567
E 지수기호 #E0
0E0
.1E7
1E6
; 패턴구분자 #,###,##+;#,###,##- 1,234,567.89+
1,234,567.890
% 퍼센트 #.#% 123456789%

 

이 외에도 다양한 기호들이 있는데, 이는 JAVA API 문서를 확인하면 자세하게 알 수 있다.

 

DecimalFormat 을 사용하기 위해서는 인스턴스를 생성하여 사용하면 되는데, 사용방법 예제는 다음과 같다.

 

String number = "1234567.89";
DecimalFormat df = new DecimalFormat("#.#E0"); // 생성자에 패턴을 입력해준다.
String result = df.format(number);

 

위의 예제는 format() 메서드를 사용하여 숫자 데이터를 형식화한 예제이다. 반대로 parse() 메서드를 사용하면 형식화된 값을 숫자로 변환할 수 있다.

 

DecimalFormat df = new DecimalFormat("#,###.##");
try {
	System.out.println(df.parse("1,234,567.89")); // 1234567.89
} catch (ParseException e) {}

 

이때 주의할 점은 parse() 메서드는 ParseException 에 대한 예외처리를 해주어야 한다.

 

 

2. SimpleDateFormat

 

SimpleDateFormat 클래스는 날짜 데이터를 원하는 형태로 구성하는데 사용되는 형식화 클래스이다.

 

기호 의미
G 연대 (BC, AD)
y 년도
M 월 (1~12 또는 1월~12월)
w 년의 몇번째 주 (1~53)
W 월의 몇번째 주 (1~5)
D 년의 몇번째 일 (1~366)
d 월의 몇번째 일 (1~31)
F 월의 몇번째 요일 (1~5)
E 요일
a 오전/오후 (AM, PM)
H 시간 (0~23)
k 시간 (1~24)
K 시간 (1~12)
h 시간 (1~12)
m (0~59)
s (0~59)
S 천분의 일초 (0~599)
z Time zone (General time zone)
Z Time zone (RFC 822 time zone)
' escape 문자 (특수문자를 표현하는데 사용)

 

Date date = new Date();
SimpleDateFormat sdf;

sdf = new SimpleDateFormat("YYYY-MM-dd");
System.out.println(sdf.format(date)); // 2022-01-06

sdf = new SimpleDateFormat("YYYY/MM/dd");
System.out.println(sdf.format(date)); // 2022/01/06

 

 

3. ChoiceFormat

 

ChoiceFormat 은 특정 범위에 속하는 값을 문자열로 변환해준다. 연속적 또는 불연속적인 범위의 값들을 처리하는데 있어서 if문이나 switch문은 적절하지 못한 경우가 많다. 이럴 때에 ChoiceFormat 을 사용하여 간단하게 직관적으로 만들 수 있다.

 

int[] scores = {100, 95, 80, 74, 60};

// 범위의 경계값들을 limits, 범위의 값들이 치환될 값들을 grades 로 정의했다.
// 이때 범위의 값은 double 형으로 오름차순으로 정렬되어있어야 하며, 치환될 값의 개수가 범위의 개수와 일치해야한다.
double[] limits = {60, 70, 80, 90};
String[] grades = {"D", "C", "B", "A"};

// 이를 ChoiceFormat 객체 호출에 사용하면 60~69: D, 70~79: C, 80~89: B, 90~: A 로 범위와 치환값이 설정된다.
ChoceFormat form = new ChoiceFormat(limits, grades);

// ChoiceFormat 의 format 메서드를 이용하여 값을 치환할 수 있다.
for(int score : scores) System.out.println(score + ":" + form.format(score);
/*
100:A
95:A
80:B
74:C
60:D
*/

// ChoiceFormat 객체를 생성할 때 위에서처럼 두가지 배열을 사용하는 것이 아니라 패턴을 이용해서도 사용할 수 있다.
// | 로 각 경계를 구분한다.
// # 과 < 두가지 구분자를 사용하는데, #은 경계값을 포함하고, <는 경계값을 포함하지 않는다.
form = new ChoiceFormat("60#D|70#C|80<B|90#A");

// 80<B 로 경계를 설정했기 때문에 위와 달리 80에 대해서 C로 치환된 값을 출력한다.
for(int score : scores) System.out.println(score + ":" + form.format(score);
/*
100:A
95:A
80:C
74:C
60:D
*/

 

 

4. MessageFormat

 

MessageFormat 은 데이터를 정해진 양식에 맞게 출력할 수 있도록 도와준다.

 

// { } 기호로 표시된 곳이 데이터가 들어갈 곳의 위치이다.
// 기호 안의 숫자는 데이터의 인덱스로 데이터 객체배열에 해당 인덱스의 값을 기호의 위치에 대입한다.
String message = "Name: {0} \nPhone: {1}\nAge: {2}\n Email: {3}";
Object[] arguments = {
    "jamie",
    "010-1234-5678",
    "28",
    "email@gmail.com"
};

String result = MessageFormat.format(message, arguments);
System.out.println(result);
/*
Name: jamie
Phone: 010-1234-5678
Age: 28
Email: email@gmail.com
*/
반응형

'프로그래밍언어 > JAVA' 카테고리의 다른 글

[JAVA] List - ArrayList, LinkedList  (0) 2022.01.22
[JAVA] Collections Framework  (0) 2022.01.22
[JAVA] Calendar & Date  (0) 2022.01.05
[JAVA] try-with-resources statement  (0) 2021.12.30
[JAVA] Serialization & Deserialization  (0) 2021.12.29