본문 바로가기

Java/Study

Ch11 Format 클래스

Format 클래스

java.text 패키지에 포함

 

1. 숫자형식 클래스

DecimalFormat, format()

숫자데이터를 원하는 형식으로 표현하기 위해서 패턴을 사용

 

적용할 패턴 선택

#,###.0

 

DecimalFormat() 생성자 매개값으로 패턴 입력하고 호출

DecimalFormat df = new DecimalFormat("#,###.0");

 

String 변수명 = 참조객체명.format(숫자);String result = df.format(1234567.89);

 

기호 의미 패턴 예 1234567.89 → 변환결과
0 10진수(빈자리는 0으로 채움)
정수부분은 0하나만 찍어도 모두 표현
소수부분은 0의 개수만큼 채워 표현
0
0.0
0000000000.00000
1234568
1234567.9
0001234567.89000
# 10진수(빈자리는 채우지 않음)
정수부분은 #하나만 찍어도 모두 표현
소수부분은 #의 개수이하 있는만큼 표현
#
#.#
#########.#####
1234568
1234567.9
1234567.89
. 소수점 #.0 1234567.9
- 음수기호
(비권장 : 음수를 줄 때 부호가 두 개 나옴)
+#.0
-#.0
+1234567.9
-1234567.9
, 단위 구분 (세자리씩 끊어준다)
#,###.0 1,234,567.9
E 지수 문자 0.0E0 1.2E6
; 양수와 음수의 패턴을 모두 기술할 경우,
패턴 구분자 (유용함)
+#,###;-#,### +1,234,568(양수일 때)
-1,234,568(음수일 때)
% 100을 곱한 후에 % 문자 붙임 #.#% 123456789 %
\u00A4 통화 기호(₩) \u00A4 #.### ₩1,234,568

0, # 모두 소수점 아래 값을 전부다 찍어주지 않았을 때,

마지막 자리까지 반올림을 기본으로 한다.

정수부분만 표현했을 경우, 소수 첫째자리에서 반올림

 

예제

더보기
package p7;

import java.text.DecimalFormat;

public class Format {

	public static void main(String[] args) {
		double num = 1234567.89;
		
		DecimalFormat df = new DecimalFormat("1번 0");//1. 소수점 없음 반올림 
		System.out.println(df.format(num)); 
		
		df = new DecimalFormat("2번 0.000");			//2.소수점 셋째자리까지 반올림하여 출력. 없으면 .0
		System.out.println(df.format(num));			
		
		df = new DecimalFormat("3번 #");				//3.소수점 첫번째에서 반올림,빈자리는 채우지 않는다.
		System.out.println(df.format(num));	
		
		df = new DecimalFormat("4번 #.#");			//4.소수점까지 출력, 빈자리는 채우지 않는다.
		System.out.println(df.format(num));
		
		df = new DecimalFormat("5번 ###.####");		//5.있는것만 나옴. 
		System.out.println(df.format(num));
		
		df = new DecimalFormat("6번 #.0");			//6.마지막0이 첫째자리에 있으므로 첫째짜리까지 반올림하고 출력
		System.out.println(df.format(num));
		
		df = new DecimalFormat("7번 +#.0");			//7.+가 인위적으로 들어감 실제 수가 -여도 -+1234567.9
		System.out.println(df.format(num));
		
		df = new DecimalFormat("8번 -#.0");			//8. 7과 마찬가지
		System.out.println(df.format(num));
		
		df = new DecimalFormat("9번 #,###.0");		//9.세자리마다 쉼표를 줄때
		System.out.println(df.format(num));
		
		df = new DecimalFormat("0.0E0");			//10.지수 형태로 표현
		System.out.println(df.format(num));
		
		df = new DecimalFormat("11번 +#,###; -#,###");//11.양수면 앞에, 음수면 뒤 형식으로 데이터에 따라 출력 (유용)
		System.out.println(df.format(num));
		
		df = new DecimalFormat("12번 \u00A4 #,###");	//12.유니코드 \u00A4는 ₩임
		System.out.println(df.format(num));		
	}
}

 


2. 날짜형식 클래스

SimpleDateFormat, format(new Date())

 

Date클래스의 toString() 메소드는 영문으로 된 날짜를 리턴하는데,만약 특정 문자열 포맷으로 얻고싶다면 java.text.SimpleDateFormat 클래스를 이용한다

 

적용할 패턴 선택

"yyyy년 MM월 dd일"

 

SimpleDateFormat의 생성자 매개값으로 패턴 입력하여 객체 생성

SimpleDateFormat sdf = new SimpleDateFormat("yyyy년 MM월 dd일");

 

③ format()메소드 호출해 문자열 얻기String strDate = sdf.format(new Date());

(확실하진 않으나, Date 타입의 객체만 매개값으로 처리)

패턴문자 의미 패턴문자 의미 패턴문자 의미 패턴문자 의미
y E 요일 H 시(0~23) m
M a 오전/오후 h 시(1~12) s
d w 년의 몇 번째 주 K 시(0~11) S

밀리세컨드
(1/1000초)


D 월 구분이 없는 일
(1~365)
W 월의 몇 번째 주 k 시(1~24)

패턴에는 자릿수에 맞게 기호를 반복해서 작성할 수 있다.

ex. yy/MM/dd E요일 a hh:mm:ss

→21/03/27 금요일 오후 12:37:20

예제

더보기
import java.text.SimpleDateFormat;
import java.util.Date;

public class SimpleDateFormatExample {
	public static void main(String[] args) {
		Date now = new Date();
		
		SimpleDateFormat sdf = new SimpleDateFormat("yy-MM-dd");
		System.out.println(sdf.format(now));
		
		sdf = new SimpleDateFormat("yyyy년 MM월 dd일");
		System.out.println(sdf.format(now));
		
		sdf = new SimpleDateFormat("yyyy.MM.dd a HH:mm:ss");
		System.out.println(sdf.format(now));
		
		sdf = new SimpleDateFormat("오늘은 E요일");
		System.out.println(sdf.format(now));
		
		sdf = new SimpleDateFormat("올해의 D번째 날");
		System.out.println(sdf.format(now));
		
		sdf = new SimpleDateFormat("이달의 d번째 날");
		System.out.println(sdf.format(now));
	}
}

 

 


3. 매개 변수화된 문자열형식 클래스

MessageFormat

 

문자열에 데이터가 들어갈 자리를 표시해 두고, 프로그램이 실행하면서 동적으로 데이터를 삽입해 문자열을 완성

문자열 연산을 대신해 좀 더 깔끔하게 데이터를 삽입시키고, 전체 문자열을 쉽게 예측할 수 있게 한다.

 

데이터가 들어갈 자리 { n }안에 표시하면서 문자열 작성

String text = "회원 ID: {0}  \n회원 이름: {1}  \n회원 전화: {2}";

{0}, {1}, {2}에 데이터가 들어간다.

 

[ 들어갈 데이터 배열 선언 ]

바로 3에서 값을 선언할 수 있다

Object[] arguments = { id, name, tel };

 

③ MessageFormat.format() 호출

첫번째 매개값은 매개 변수화된 문자열(적용시킬 문자열)

두번째 이후의 매개값은 인덱스 순서에 맞게 나열하거나 2의 배열 대입

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

 

예제

더보기

 

import java.text.MessageFormat;
public class MessageFormatEx {

	public static void main(String[] args) {
		String id = "java";
		String name = "신용권";
		String tel = "010-123-4567";
   	 	int age = 20;
		
		String text = "회원 ID: {0} \n회원 이름: {1} \n회원 전화: {2} \n회원 나이: {3}";
		String result1 = MessageFormat.format(text, id, name, tel, age);
		System.out.println(result1);
		System.out.println();
		
		String sql = "insert into member value({0}, {1}, {2})";
		Object[] arguments = {"'java'", "'신용권'", "'010-123-4567'"}; //' single quote 필수
		String result2 = MessageFormat.format(sql, arguments);
		//sql 문자열을 나중에 채워서 완성함. 즉, 나중에 데이터베이스에서 받아서/네트워크에서 나중에 자료를 받아 위에 있는 문자열을 채움.
		System.out.println(result2);
		}
	}