IT/언어

[Java] String.format 사용법

개발자 두더지 2023. 5. 30. 23:01
728x90

일본의 한 블로그 글을 번역한 포스트입니다. 오역 및 의역, 직역이 있을 수 있으며 틀린 내용은 지적해주시면 감사하겠습니다.

 

 

개요


 Java에는 String.format이라는 메소드가 있다. 이 메소드는 인수에 지정한 문자열(서식)을 원래 규칙에 따른 문자열을 반환하는 메서드이다.

 설명만으로는 제대로 이해하기 힘들 수 있다고 생각하므로, 바로 코드를 살펴보자.

int hoge = 1;
String str = String.format("변수hoge의 내용은%d이다.", hoge);
 
System.out.println(str);

 실행시키면 다음과 같다.

변수hoge의 내용은1이다.

 String.format의 첫 번째 인수는 정해진 룰(서식)에 따라 쓸 필요가 있다. 그리고 두 번째 인수 이후는 첫 번째 인수에서 정한 서식에 할당하기 위한 변수를 순서에 맞게 전달해나간다.

 서식, 서식이라고 이야기하고 있지만 "%~"이라고 쓴 부분을 일컫는다. 이 부분을 두 번째 인수이후에 지정한 값으로 바꿔주는 것이 String.format이다.

 숫자를 다룰 경우는 첫 번째 인수의 문자열 안에 "%d"라고 쓴다. 그럼 문자열이나 참거짓, 소수등을 다룰 때는 어떻게 하면 좋을지에 대해 지금부터 설명하도록 하겠다.

 

 

여러가지 데이터형 다루기


참거짓 값(%b)

 참거짓(true 혹은 false)를 다루고 싶은 경우는 "%b"를 사용한다.

String str = String.format("TRUE는%b、FALSE는%b", true, false);
TRUE는true、FALSE는false

 

문자열 값(%s)

 문자열(여러 개의 문자 모음)을 다루고 싶은 경우는 "%s"를 사용하자.

String str = String.format("문자열의 내용은%s", "HOGE");
문자열의 내용은 HOGE

 

문자 값(%c)

 방금은 문자열의 예이지만 이번에는 문자를 다루고 싶을 때의 예이다. 이와관련해서 문자는 문자열과 다르다. 문자열은 여러개의 문자의 모음을 의미하고 문자는 한 개의 문자(엄밀하게 말하자면 1바이트)이다.

 이러한 문자를 다룰 때는 "%c"를 사용하자.

String str = String.format("귀하의 평가는%c", 'A');
귀하의 평가는A

 

부동소수점 값(%f)

 부동 소수점을 다루고 싶은 경우 "%f'를 사용하면 표현할 수 있다.

String str = String.format("원주율은 %f", 3.1415);
원주율은 3.141500

 

날짜 값(%tXX)

 날짜를 다루고 싶은 경우는 연, 월, 일 등을 지정한다는 점에서 지금까지의 것들과 다르다. 종류가 많으므로 다음과 같이 표로 표시했다.

파라미터명 내용
H 시간(00~23)
I 시간(01~12)
k 시간(0~23)
l 시간(1~12)
M 분(00~59)
S 초(00~60)
L 밀리초(000~999)
N 나노초(000000000~999999999)
p am 혹은 pm 표시
s 1970년 1월 1일부터의 초
Q 1970년 1월 1일부터의 밀리초
B January나February등의 월 영어 표기 
b 위의 생략형
a 요일의 영어 표기
C 4행의 연도를 100으로 나눈 숫자(00~99)
Y
y 두 글자 연도
j 연의 몇 번째 날인가
m 월(01~13)
d 월의 몇 번째 날인가(01~31)
e 월의 몇 번째 날인가(1~31)
Date date = new Date();
String date_str = String.format("%tH:%tM", date.getTime(), date.getTime());
System.out.println(date_str);

 

 

숫자를 가공하여 출력


콤마로 구분

 은행처럼 숫자마다 콤마로 나누고 싶은 경우에는 다음과 같이 쓰면 된다.

String str = String.format("%,d", 123456789);
123,456,789

 

8진수로 표시

 8진수로 표시하고 싶은 경우 "%o"를 사용한다.

String str = String.format("8진수로 표시하면%o", 10);
8진수로 표시하면12

 

16진수로 표시

 16진수의 경우 "%x"를 사용하면 된다.

String str = String.format("16진수로 표시하면%x", 10);
16진수로 표시하면a

 

숫자의 맨 앞에 무언가로 채우고 싶은 경우

0으로 채우고 싶은 경우

00001과 같이 앞 부분은 0으로 채우고 싶은 경우 다음과 같이 하면 된다.

String str = String.format("%05d", 1);
00001

 0뒤에는 자리 수를 입력하면 된다. 따라서 위 코드에서는 입력하는 숫자가 다섯 자리 수치인 경우는 0이 없어진다.

앞 부분을 공백으로 채우고 싶은 경우

String str = String.format("%5d", 10);
   10

뒷 부분을 공백으로 채우고 싶은 경우

String str = String.format("%-5d", 10);
10

참고자료

https://www.sejuku.net/blog/14466

728x90