본문으로 바로가기

[JAVA] String.format의 %%%ds 의미

category 개발 2021. 9. 14. 00:30

package test;

import java.util.Scanner;

public class StringFormat {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String s = "StringFormat";

		while (true) {
			System.out.print("\n자리 수 : ");
			int idx = sc.nextInt();

			if (idx == 0)
				break;

			System.out.println("표현 : %" + idx + "s");
			System.out.println("|||||||||||||||||||||||||||||||");
			System.out.printf(String.format("%%%ds\n", idx), s);
		}
	}
}

 

출력문에서 전체 출력 공간을 지정할 때 정수형의 경우 %10d, 문자열의 경우 %10s처럼 %와 타입 사이에 숫자로 전체 길이를 지정한다. 전체 길이가 변화할 경우 printf()와 String.format()을 사용해 변수를 사용할 수 있다. 예제에서 사용된 %%%ds와 idx는 입력 된 자리 수 10, 12, 15, 20을 %10s, %12s, %15s, %20s처럼 나타내기 위한 표현이다. 

 

%%%ds는 떼어내 %%, %d, s처럼 3부분으로 나눈다고 가정한다. %d에는 뒤에서 제공한 변수 idx의 값을 가져간다. 예를들어 10이라 가정한다면 다음처럼 된다. %%, 10, s. String.format()에서 printf()로 값을 넘겨줄때 %%는 %로 변환된다. 즉, %, 10, s이다. 이를 조합해 printf()에 넘겨지는 값을 예측하면 %10s와 같다. %10s는 printf()의 두번째 인자인 변수 s의 값인 "StringFormat"을 전체 10칸에 출력한다. 변수 s의 전체 길이는 12로 그 이하에서는 변화가 없다. 15, 20을 입력했을 때 출력값이 바뀌는 것을 확인할 수 있다.

 

실행화면