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