Java - printf()로 문자열 포맷 출력

JS · 25 Oct 2020

Java에서 System.out.printf()으로 어떤 형식의 문자열을 출력할 수 있습니다.

예를 들어, 다음과 같이 인자로 format과 변수들을 전달하면 형식에 맞게 출력됩니다.

String world = "World";
String java = "Java";
System.out.printf("Hello, %s, %s", world, java);

위 코드를 실행하면, %s는 순차적으로 world와 java의 값으로 변환되어 문자열이 출력됩니다.

Hello, World, Java

Syntax

Syntax는 다음과 같습니다.

  • System.out.printf(format, arguments)

%s와 같은 지시자들은 아래와 같은 것들이 있습니다.

  • %n : 줄바꿈
  • %s : String 형식으로 출력
  • %d : integer 형식으로 출력
  • %f : float 형식으로 출력
  • %t : date, time 형식으로 출력
  • %o : 8진수 integer 형식으로 출력
  • %x : 16진수 integer 형식으로 출력
  • %b : boolean 형식으로 출력
  • %e : 지수 형식으로 출력

Boolean 출력 예제

%b는 boolean을 소문자로 출력, %B는 대문자로 출력합니다.

System.out.printf("%b%n", null);
System.out.printf("%B%n", true);
System.out.printf("%B%n", false);

Output:

false
TRUE
FALSE

String 출력 예제

%s는 기존 문자열을 출력하며, %S는 모두 대문자로 변환 후 출력합니다.

String world = "World";
String java = "Java";
System.out.printf("Hello, %s, %s %n", world, java);
System.out.printf("Hello, %S, %S %n", world, java);

Output:

Hello, World, Java
Hello, WORLD, JAVA

%15s처럼 가운데 숫자를 입력하면, 입력한 숫자만큼의 공간을 할당합니다. 숫자가 양수라면 문자열은 오른쪽으로 정렬되며, 음수라면 왼쪽에 정렬됩니다.

String java = "Java";
System.out.printf("[%15s]%n", java);
System.out.printf("[%-15s]%n", java);

Output:

[           Java]
[Java           ]

아래 코드에서 .4는 출력할 문자열 개수입니다.

System.out.printf("%2.4s%n", "Hello World!");

실행 결과를 보면 4개의 문자만 출력되었습니다.

Hell

정수 출력 예제

다음과 같이 정수를 출력할 수 있습니다. %5.2f처럼 formatting 안의 숫자의 의미는 위의 String에서 살펴본 것과 동일합니다.

System.out.printf("%d%n", 100L);
System.out.printf("%f%n", 123.456);
System.out.printf("%5.2f%n", 123.456);
System.out.printf("%5.2e%n", 123.456);

Output:

100
123.456000
123.46
1.23e+02

시간 출력 예제

Date 객체는 시간 정보를 갖고 있습니다. %tH는 Date의 Hour 값을 출력하며, %tM은 분 단위를, %tS는 초 단위를 출력합니다.

Date date = new Date();
System.out.printf("hours: %tH, minutes: %tM, seconds: %tS %n",
        date, date, date);

Output:

hours: 21, minutes: 58, seconds: 26

아래 예제에서 A는 요일, B는 달, Y는 년도를 출력합니다.

System.out.printf("%tA, %tB %tY %n", date, date, date);

Output:

Sunday, October 2020

여기서 date가 여러번 인자로 전달되어 불편한데요. 인자를 한번만 입력하고 싶을 때는, 다음과 같이 format에 첫번째 인자를 의미하는 1$를 모두 써주면 됩니다.

System.out.printf("%1$tA, %1$tB %1$tY %n", date);
댓글을 보거나 쓰려면 이 버튼을 눌러주세요.
codechachaCopyright ©2019 codechacha