[JAVA] printf() 문자열 포맷 알아보기

오늘은 Java에서 printf() 함수를 사용할 때 %로 시작하는 키워드에 대한 문자열 출력 포맷에 대하여 정리하는 포스팅을 준비했습니다.

많은 분들이 알고 계시고 자주 사용하는 %d, %s에서 부터 잘 사용하진 않지만 그래도 한번쯤 이런것이 있다하고 알아두면 언젠가 한번쯤 써먹게 될 만한 %x(16진수표현)에 대하여 정리를 해 보았습니다.

이번 포스팅은 개념보다는 정리 차원의 포스팅이니 가볍게 읽어 나가셔도 될것 같습니다.


여러분들도 다 알고 계시고 자주 사용하는 printf()와 %s를 사용하여 아래와 같이 출력을 표현할 수 가 있죠.

String str = "World!";
System.out.printf("Hello %s", str);

위와 같은 소스코드를 실행해보면 %s가 str의 변수에 들어 있는 "World!" 문자로 치환되어 결과는 아래와 같이 표시되는 것을 알 수 있습니다.

Hello World!

혹시나 처음 보시는 분들을 위해 간단히 printf()의 함수에 대하여 설명드렸습니다.


이제 printf() 포맷에 대한 문법은 다음가 같습니다.

System.out.printf(format, arguments);

위에서 잠시 살펴본 %s와 같은 지시자 또는 키워드들은 아래와 같은 것들이 있습니다.


위에 정리한 내용 외에 추가적으로 아래와 같이 응용하여 사용하는 것이 가능합니다.

String 출력시 왼쪽/오른쪽 맞춤으로 출력하기

System.out.printf("[%20s]%n", "Hello!");    // 숫자가 양수면 오른쪽 정렬
System.out.printf("[%-20s]%n", "Hello!");   // 숫자가 음수면 왼쪽 정렬
[              Hello!]
[Hello!              ]

여기서 %n은 새로운 줄을 의미하는 다음줄로 이동을 의미합니다. 즉, Hello를 출력하고 다음줄로 이동이라는 의미가 되죠.

그리고 만약 %10.3s와 같이 출력 포맷을 사용한다면
// 10개의 공간을 만들고 3글자만 출력.
System.out.printf("[%10.3s]%n", "Hello!");
[       Hel]
그러면 이와 같이 10개의 빈공간을 만들고 오른쪽 정렬하여 그중 3개의 글자(.3)만 출력하라는 의미가 됩니다.

Float 출력시 소수점 왼쪽/오른쪽 맞춤으로 출력하기

System.out.printf("[%10.2f]%n", 123.456);    // 양수면 오른쪽 정렬
System.out.printf("[%-10.2f]%n", 123.456);   // 음수면 왼쪽 정렬
[123.46    ]
[    123.46]
String 출력과 동일하게 Float에서도 왼쪽/오른쪽 맞춤으로 출력하는 것이 가능합니다. 

다만 소수점 표현(.2) 같은 경우 전체 전체 글자 123.456에서 2글자만 출력하라는 표현이 아닌 소수점 이하 2자리까지만 표시 한다는 의미임을 주의하시기 바랍니다.

Integer 출력시 소수점 왼쪽/오른쪽 맞춤으로도 당연히 출력이 되겠죠

System.out.printf("[%10d]%n", 123);    // 양수면 오른쪽 정렬
System.out.printf("[%-10d]%n", 123);   // 음수면 왼쪽 정렬
[123      ]
[      123]

여기까지는 모두 비슷한 개념으로 접근하여 서로 응용하여 출력을 표현할 수 있습니다.

하지만 Date를 표시하는 포맷의 경우 표현식이 조금은 다릅니다. 여기에서는 맛보기로 어떻게 표현한다라는 것을 보여드리며, 보다 상세한 표현은 검색을 통해 자세히 알아보시면 될 거 같습니다.

시간 출력에 대한 표현식

먼저 Date 클래스를 생성자를 통해 선언하면 현재 시간을 Timestamp 형식으로 가지고 있습니다. 즉, 현재 시간을 변수 date에 가지고 있겠죠.

date 객체의 현재 시간을 이용해 현재 날자와 시간을 표시하기 위해 %t를 사용합니다. 그리고 그 다음에 오는 영문자는 년(y), 월(m), 일(d) 또는 시(H), 분(M), 초(S)에 대한 지시자를 이용합니다. 여기서 대소문자에 주의하세요.

Date date = new Date();
System.out.printf("%ty년 %tm월 %td일%n", date, date, date);
System.out.printf("%tH시 %tM분 %tS초%n", date, date, date);
21년 12월 24일
09시 29분 34초

그러면 요일(A)과 달(B)에 대한 영문 표현도 표시해 봅시다.  그리고 요일을 표시할 경우 대문자 A와 소문자 a가 다르다는 것에 주의하세요. 달을 표시하는 경우에는 대소문자에 대한 표현이 동일합니다.

System.out.printf("%tA %tB%n", date, date);
System.out.printf("%ta %tb%n", date, date);
금요일 12월
금 12월

여기서 주의할 점은 시스템에 따라서 요일이 한글로 표시될 수도 있고 영문으로 표시될 수도 있음을 주의하시기 바랍니다.

그리고 뒤에오는 date를 매번 반본하기 귀찮은 분들을 위해 간편한 방법을 소개합니다. 인자 선택 지시자인데요. 첫번째 인자를 의미하는 1$를 이용해 한번에 아래와 같이 표현할 수 있습니다.

System.out.printf("%1$ty년 %1$tm월 %1$td일%n", date);
21년 12월 24일



포맷에 대한 보다 상세한 내용은 아래의 사이트를 참고하시기 바랍니다.

https://docs.oracle.com/javase/tutorial/java/data/numberformat.html




댓글

이 블로그의 인기 게시물

[JAVA] 변수란? 변수타입?

[JAVA] 문자셋(Charset)

[JAVA] 문자열 비교[== vs equals()]의 차이