서식 문자열로 문제를 해결하는데 자바뿐만 아니라 대부분의 현대 프로그래밍 언어에서 사용할 수 있습니다. 핵심은 String 레이아웃(String을 어떻게 출력할지)과 데이터(무엇을 출력할지)를 분리하는 것입니다. 서식 문자열은 %로 표기하는 특수 위치 지정자(placeholder) 문자를 사용해 하나의 블록으로 일관된 String을 정의합니다.
String.format()이나 System.out.printf()와 같은 포맷 메서드는 위치 지정자 문자가 포함된 데이터를 String 뒤에 나열한 순서대로 받아들입니다.
위 예제에서 %S는 toString() 메서드를 사용해 객체를 대문자 String으로 변환합니다. 매개변수인 author를 이렇게 처리하죠. 날짜 변수인 today는 월을 나타내는 %tm, 날짜를 나타내는 %te, 연도를 나타내는 %tY에 쓰입니다. < 문자를 추가함으로써 위치 지정자 세 개가 같은 입력 데이터를 읽게 했습니다. %d는 십진 값을 처리하고 %s는 String을 받아들입니다. 마지막으로 %n은 행 바꿈 기호입니다.
실제 데이터는 String 레이아웃 뒤에 단정하게 서식화되어 나열되어 있습니다. 각 매개변수를 한 줄씩 나열하면 인라인 계산을 수행하기 좀 더 쉽습니다. "%S: [%tm-%<te-%<tY](Day %d)> %s%n"가 최종적으로 무엇을 출력할지는 알기 어렵습니다. 하지만 이 방식은 문서화가 잘 된 표준이자 어수선한 코드를 해결할 훌륭한 대안입니다. 문자열이 길면 강력한 템플릿 엔진인 StringTemplate을 쓰기 바랍니다.
서식화한 문자열은 3.6 예제로 설명하기에서처럼 몇 가지 예제로 문서화하는 것이 좋습니다. 다른 개발자가 코드를 읽을 때 %S나 다른 특수 서식화 문법이 어떻게 동작하는지 찾아보지 않더라도 결과 문자열을 알 수 있게 해주세요.