[JAVA] String.format() - 문자열 형식 지정

joyful·2021년 4월 9일
4

Java/Spring

목록 보기
22/28
post-custom-banner

📚 String.format()

  • 리턴되는 문자열의 형태를 지정하는 메소드
  • 서식 문자열의 앞에 %를 붙여 문자열에 사용하면 그 위치에 변수의 값을 형식화 하여 대입 가능하다.
  • 대문자나 소문자를 지정할 수 있는 서식 문자열에서 대문자 지정시 대문자로 변환된 값이 표시된다.(String.toUpperCase() 메소드를 호출한 결과와 동일)

📌 포맷 지정 서식

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

📊 [표1] 숫자 / 문자 변환

서식분류설명
'b', 'B'참 거짓boolean 값 지정
'h', 'H'16진수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 : 시간, MM : 분
'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

📌 아규먼트 인덱스(argument index)

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

💻 예시

✅ 소스코드

import java.time.LocalDateTime;

public class Main {
	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);  // $< 로 상대 인덱스 지정하여 직전의 인수와 같은 인덱스를 이용
        
	}
}

✅ 실행 결과

문자열 서식: StringFormatExample, STRINGFORMATEXAMPLE
boolean 서식 문자열: TRUE, true
정수 서식: 1234, 2322, 4d2, 01234
부동 소수점 서식: 1.234040e+03, 1234.030000, 1234.02, 0x1.3480a3d70a3d7p10
날짜/시간 서식: 2021년 04월 09일 16시 21분 33초

📚 참고

profile
기쁘게 코딩하고 싶은 백엔드 개발자
post-custom-banner

0개의 댓글