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);
}
}

'Java > Study' 카테고리의 다른 글
Ch12. 멀티스레드 (0) | 2021.03.29 |
---|---|
Ch11 확인문제 (0) | 2021.03.29 |
Ch11 기본 API 클래스 - StringTokenzier, 정규표현식 (0) | 2021.03.25 |
Ch11 기본 API클래스 - 해시코드 (0) | 2021.03.25 |
Ch11 java.lang & java.util 패키지(Object, System, Class 클래스) (0) | 2021.03.23 |