Back-end/이것이 자바다[신용권 한빛미디어]

Format 클래스

Ho's log 2021. 10. 24. 22:08

정수 세 자리마다 쉼표(,)를 넣고 싶다면 어떻게 해야할까?

정수를 문자열로 변환한 다음 세자리, 씩 끊어서 쉼표를 넣을수있을것이다.

 

이작업은 코드가 지저분해진다

 

많은 수의 점수를 리스트화해서 출력할때 소수점 한자리로 일정하게 맞추어 출력하려면 어떻게 해야할까?

각점수에 10을 곱해서 정수화 하고, 다시 10.0 으로 나누어 소주점 한자리로 만드러야 한다

이작업도 코드가 지저분해보인다

 날짜 역시 원하는 문자열로 출력하기 위해서는 Calendar로부터 년, 월, 일 , 시 ,분, 초 를 얻어 원하는 문자열로 조합하는 과정을 거쳐야한다. 

자바 에서는 이러한 문제들을쉽게 해결할 수있는 방법을 제공 

-> 형식 클래스 

 

java.text 패키지에 포함되어있다 

숫자 형식을 위해 DecimalFormat

날짜형식을 위해 SimpleDateFormat 

매개변수화된 문자열 형식을 위해 MessageFormat 등을 제공 

 

숫자 형식 클래스(DecimalFormat)


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

기호 의미 패턴 예 1234567.89 -> 변환결과
0 10진수(빈자리는 0으로 채움) 0
0.0
000000000.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

 

적용할 패턴을 선택했다면 DecimalFormat 생성자 매객밧으로 지정해서 객체를 생성하면 된다.

그리고 나서 format() 메소드를 호출해서 패턴이 적용된 문자열을 얻으면 된다.

 

DecimalFormat df = new DecimalFormat("#,###.0");
String result = df.format(1234567.89);

 

날짜 형식 클래스 (SimpleDateFormat)

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

java.text.SimpleDateFormat 클래스를 이용하면 된다. 

SimpleDateFormat 클래스도 날짜를 원하는 형식으로 표현하기 위해서 패턴을 사용

패턴 문자 의미 패턴 문자 의미
y H 시(0~23)
M h 시(1~12)
d K 시(0~11)
D 월 구분이 없는 일(1~365) k 시(1~24)
E 요일 m
a 오전/오후 s
w 년의 몇번째 주 S 밀리세컨드(1/1000초)
W 월의 몇번쨰 주     

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

예를 들어 yyyy는 년도를 4자로 표시

MM, dd 는 각각 달과 일을 2자로 표시하라는 의미 

적용할 패턴을 작성했다면 

SimpleDateFormat 생성자 매개값으로 지정해서 객체를 생성하면 된다 

그리고 나서 format() 메소드를 호출해서 패턴이 적용된 문자열을 얻으면 된다. 

SimpleDateFormat sdf = new SimpleDateFormat("yyyy년 MM월 dd일");
String strDate = sdf.format(new Date());

 

문자열 형식 클래스(MessageFormat)


데이터를 파일에 저장하거나, 네트워크로 전송할때, 데이터베이스 SQL문을 작성할 때

많은 부분에서 일정한 형식의 문자열을 사용

MessageFormat 클래스를 사용하면

문자열에 데이터가 들어갈 자리를 표시 

프로그램이 실행하면서 동적으로 데이터를 삽입해 문자열을 완성시킬 수 있다.

String result = "회원 ID: " + id + "\n회원 이름: " + name + "\n회원 전화: " +tel;

 

+ 연산자로 인해 복잡해 보이고, 전체 문자열 파악하기 힘든

 

String message = "회원 ID: {0}\n 회원 이름: {1} \n 회원 전화 : {2}";
String result = MessageFormat.format(message, id, name, tel);

 

MessageFormat 은 정적 format() 메소드를 호출해서 완성된 문자열을 리턴시킨다.

format() 메소드의 첫 번째 매개값은 매개 변수화된 문자열을 지정 

두 번째 이후의 매개값은 인덱스 순서에 맞게 값을 나열 or 배열을 대입해도 된다 .

 

String message = "회원 ID: {0}\n 회원 이름: {1} \n 회원 전화 : {2}";
Object[] arguments = {id, name, tel};
String result = MessageFormat.format(message, id, name, tel);

 

'Back-end > 이것이 자바다[신용권 한빛미디어]' 카테고리의 다른 글

멀티 스레드 개념  (0) 2021.11.22
java.time 패키지  (0) 2021.10.25
Date, Calender 클래스  (0) 2021.10.24
Math, Random 클래스  (0) 2021.10.24
Wrapper(포장) 클래스  (0) 2021.10.24