Menu

Java 문자열 포맷: String.format, printf, 그리고 형식 지정자

Java에서 String.format과 printf로 문자열을 포맷하는 방법 - 숫자, 패딩, 소수점을 위한 형식 지정자, 그리고 텍스트 블록과 formatted 메서드.

이 페이지에는 실행 가능한 에디터가 있습니다 - 편집하고 실행하면 결과를 바로 볼 수 있습니다.

포맷하는 두 가지 방법

Java는 형식 지정자(% 자리표시자)를 담은 템플릿과 그 안에 넣을 값으로 문자열을 포맷합니다. 진입점은 두 개이며, 둘은 동일한 구문을 공유합니다:

  • String.format(template, values...)은 새 String을 반환합니다.
  • System.out.printf(template, values...)은 결과를 곧바로 출력합니다.

둘 다 같은 텍스트를 만듭니다. String.format은 저장할 수 있도록 결과를 돌려주고, printf는 결과를 콘솔에 씁니다. printf 템플릿 끝의 %n을 눈여겨보세요 - 이는 플랫폼에 독립적인 줄바꿈입니다(형식 문자열에서는 \n보다 이것을 선호하세요).

자주 쓰는 지정자

각 지정자는 %로 시작하고, 어떤 종류의 값을 기대하는지 알려주는 글자로 끝납니다:

일상적으로 쓰는 세 가지는 %s(임의의 값, 그 값의 toString을 통해), %d(정수), %f(소수)입니다. 리터럴 퍼센트 기호를 출력하려면 %%를 사용하세요. 잘못된 타입을 넘기면 - 예를 들어 %dString을 넘기면 - 실행 시간에 예외IllegalFormatConversionException이 발생합니다.

소수점 자릿수 제어

%f는 기본적으로 소수점 여섯 자리를 쓰는데, 이는 원하는 경우가 드뭅니다. 정밀도를 고정하려면 f 앞에 .N을 넣으세요(값은 반올림됩니다):

큰 숫자의 묶음 구분 기호를 위해 콤마 플래그를 추가하세요:

너비와 패딩

%와 타입 글자 사이의 숫자는 최소 필드 너비를 정해, 열이 맞춰지도록 공백으로 채웁니다. 앞에 붙은 -는 왼쪽 정렬을, 앞에 붙은 0은 숫자를 0으로 채웁니다:

바로 이것이 포맷된 표와 정렬된 보고서를 읽기 쉽게 만듭니다:

%-8s는 이름을 너비 8의 열에서 왼쪽 정렬하고 %5d는 점수를 너비 5의 열에서 오른쪽 정렬하므로, 자릿수와 관계없이 숫자가 맞춰집니다.

인자 순서

기본적으로 지정자는 값을 왼쪽에서 오른쪽으로 소비합니다. N$(1부터 시작하는 인덱스)로 값을 반복하거나 순서를 바꿀 수 있으며, 같은 값이 두 번 나올 때 편리합니다:

%1$s는 두 번 모두 첫 번째 인자를 가리키므로 echo가 두 번 출력됩니다.

formatted() 메서드

Java 15부터 모든 문자열에 formatted 인스턴스 메서드가 있습니다 - String.format과 같은 엔진을, 템플릿에 대한 메서드 호출로 쓴 것입니다:

더 큰 포맷 출력을 만들 때 텍스트 블록(삼중 따옴표로 둘러싼 여러 줄 문자열)과 특히 잘 어울립니다.

String.format을 쓰지 말아야 할 때

단순한 일회성 결합에는 +를 이용한 평범한 연결이 더 명확하고 빠릅니다:

String greeting = "Hi, " + name + "!";   // simpler than String.format here

고정 소수점 자릿수, 패딩, 정렬, 구분 기호 같은 진짜 포맷이 필요할 때 String.format / printf를 꺼내 쓰세요. 값 몇 개를 그냥 붙이는 경우가 아니라요.

다음: 연산자

포맷은 값을 텍스트로 바꿉니다. 애초에 그 값을 계산하려면 Java의 연산자 - 산술, 비교, 논리 - 가 필요합니다. 그것이 다음 페이지입니다.

자주 묻는 질문

Java에서 문자열을 어떻게 포맷하나요?

String.format(template, values...)를 사용하세요. 이 메서드는 각 형식 지정자를 값으로 치환한 새 문자열을 반환합니다: String.format("%s is %d", name, age). 문자열을 만드는 대신 곧바로 출력하려면 같은 템플릿으로 System.out.printf(...)를 사용하세요. Java 15부터는 template.formatted(values...)도 호출할 수 있습니다.

Java에서 숫자를 소수점 둘째 자리까지 어떻게 포맷하나요?

%.2f 지정자를 사용하세요: String.format("%.2f", 3.14159)"3.14"를 만듭니다. 점 뒤의 숫자가 유지할 소수점 자릿수이며, 값은 반올림됩니다. 천 단위 구분 기호를 넣으려면 콤마 플래그를 추가하세요: %,.2f"1,234.57"을 만듭니다.

Java에서 String.format과 printf의 차이는 무엇인가요?

둘은 정확히 같은 형식 지정자를 사용합니다. String.format(...)은 포맷된 텍스트를 새 String으로 반환하므로 저장하거나 전달할 수 있습니다. System.out.printf(...)은 포맷된 텍스트를 표준 출력에 곧바로 쓰고 유용한 값을 반환하지 않습니다. 문자열을 만들려면 String.format을, 출력하려면 printf를 사용하세요.

Coddy programming languages illustration

Coddy로 코딩 배우기

시작하기