Post

Java String.format()

1. String.format()

리턴되는 문자열의 형태를 지정하는 메소드로, 서식 문자열의 앞에 %를 붙여 문자열에 사용하면 그 위치에 변수의 값을 형식화 하여 대입 가능하다.

대문자나 소문자를 지정할 수 있는 서식 문자열에서 대문자 지정시 대문자로 변환된 값이 표시된다.

2. 포맷 지정 서식

format에 지정할 수 있는 주요 서식을 나타낸 표이다. % 문자와 함께 조합하여 사용한다.

1) 숫자/문자 변환

서식분류설명
b, B참 거짓boolean 값
h, H16진수16진수
s, S문자열문자열
c, C문자문자
d정수10진 정수로 표시
o정수8진 정수로 표시
x, X정수16진 정수로 표시
e, E부동 소수점10진수(가수와 진수)로 표시
f부동 소수점10진수로 표시
g, G부동 소수점10진수(반올림)로 표시
a, A부동 소수점16진수(가수와 진수)로 표시
t, T날짜, 시간날짜 및 시간 서식 문자 앞에 지정 ex) %tH, %tM, %tS
%퍼센트퍼센트 표시
n줄 구분개행문자 표시

2) 날짜/시간 변환

서식분류설명
H시간24시간 형식의 시(00-23)
I시간12시간 형식의 시(01-12)
k시간24시간 형식의 시(0-23)
l시간12시간 형식의 시(1-12)
M시간분(00-59)
S시간분초(00-60)
L시간밀리초(000-999)
N시간나노초(000000000-999999999)
z시간UTC 오프셋. 출력은 +HHMM 또는 -HHMM 형식의 문자열. +는 GMT 동쪽, -는 GMT 서쪽, HH는 GMT에서 시간 수, MM은 GMT에서의 분 수를 나타냄
Z시간시간대명
s시간1970년 1월 1일 시작 이후 초(00:00:00)
Q시간1970년 1월 1일 시작 이후 밀리초(00:00:00)
B날짜국가 고유의 전체 월명 ex) January, Februry
b, h날짜국가 고유의 축약 월명 ex) Jan, Feb
A날짜국가 고유의 전체 요일명 ex) Sunday, Monday
a날짜국가 고유의 축약 요일명 ex) Sun, Mon
C날짜세기 수(00-99) 연도를 100으로 나누고 정수로 자름
Y날짜년(4자리), 음수 가능
y날짜년(2자리, 00-99)
j날짜연도의 일(001-366)
m날짜월(01-12)
d날짜월의 일(01-31)
e날짜월의 일(1-31)
R날짜/시간초가 없는 24시간 형식(%H:%M)
T날짜/시간초가 있는 24시간 형식(%H:%M:%S)
r날짜/시간국가 고유의 AM/PM 형식 시간. 국가 고유의 시간 형식을 사용할 수 없는 경우, 디폴트는 POSIX 시간 AM/PM 형식(%I:%M:%S %p)
D날짜/시간날짜 형식(%m/%d/%y)
F날짜/시간ISO 날짜 형식(%Y-%m-%d)
c날짜/시간국가 고유 형식의 날짜/시간 ex) %ta %tb %td %tT %tZ %tY → Sun Jul 20 16:17:00 EDT 1969

3. Argument Index

인수 목록에서 인수의 위치를 나타내는 10진수 정수(해당 인수를 인덱스로 지정)하고, 아라비아 숫자와 $ 문자로 구성하며(첫 번째 인수 1$, 두 번째 인수 2$), < 플래그를 사용하면 이전 형식 지정자에 대한 인수를 재사용 할 수 있다.

1) 예시

  • ArgumentIndexTest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.time.LocalDateTime;

public class ArgumentIndexTest {
    public static void main(String[] args) {
        String str = "StringFormatExample";
        boolean bool = true;
        int n = 1234;
        LocalDateTime now = LocalDateTime.now();

        String result = String.format("문자열 서식: %s, %S", str, str);
        System.out.println(result);

        result = String.format("boolean 서식 문자열: %B, %b", bool, bool);
        System.out.println(result);

        result = String.format("정수 서식: %d, %o, %x, %05d", n, n, n, n);
        System.out.println(result);  // %05d → 5자릿수, 공백을 0으로 채움

        result = String.format("부동 소수점 서식: %4$e, %3$f, %2$g, %1$a", 1234.01, 1234.02, 1234.03, 1234.04);
        System.out.println(result);  // %숫자$ 로 절대 인수 인덱스 지정

        result = String.format("날짜/시간 서식: %tY년 %<tm월 %<td일 %<tH시 %<tM분 %<tS초", now);
        System.out.println(result);  // $< 로 상대 인덱스 지정하여 직전의 인수와 같은 인덱스를 이용
    }
}
  • 결과
1
2
3
4
5
문자열 서식: StringFormatExample, STRINGFORMATEXAMPLE
boolean 서식 문자열: TRUE, true
정수 서식: 1234, 2322, 4d2, 01234
부동 소수점 서식: 1.234040e+03, 1234.030000, 1234.02, 0x1.3480a3d70a3d7p10
날짜/시간 서식: 2021년 04월 09일 16시 21분 33초

[출처 및 참고]

This post is licensed under CC BY 4.0 by the author.