[java] String.format에서 매개 변수를 재사용 하시겠습니까?

String hello = "Hello";

String.format("%s %s %s %s %s %s", hello, hello, hello, hello, hello, hello);

hello hello hello hello hello hello 

format 메소드를 호출 할 때 hello 변수를 여러 번 반복해야합니까, 아니면 모든 %s토큰에 적용 할 인수를 한 번 지정할 수있는 속기 버전이 있습니까?



답변

에서 워드 프로세서 :

  • 일반, 문자 및 숫자 유형의 형식 지정자는 다음 구문을 갖습니다.

        %[argument_index$][flags][width][.precision]conversion

    선택적 argument_index 는 인수 목록에서 인수의 위치를 ​​나타내는 10 진 정수입니다. 첫 번째 인수는로 "1$", 두 번째 인수는 등으로 참조됩니다 "2$".

String.format("%1$s %1$s %1$s %1$s %1$s %1$s", hello);


답변

다른 옵션은 상대 색인 을 사용하는 것 입니다. 형식 지정자는 마지막 형식 지정자와 동일한 인수를 참조합니다.

예를 들면 다음과 같습니다.

String.format("%s %<s %<s %<s", "hello")

결과 hello hello hello hello.


답변

%[argument_index$]다음과 같이 인수 를 색인해야합니다 .

String hello = "Hello";
String.format("%1$s %1$s %1$s %1$s %1$s %1$s", hello);

결과 : hello hello hello hello hello hello


답변

인수를 재사용하는 일반적인 경우 중 하나 String.format는 구분 기호 (예 : ";"CSV 또는 콘솔 탭)입니다.

System.out.println(String.format("%s %2$s %s %2$s %s %n", "a", ";", "b", "c"));
// "a ; ; ; b"

이것은 원하는 출력이 아닙니다. "c"어디에도 나타나지 않습니다.

구분 기호를 먼저 사용하고 (와 함께 %s) %2$s다음과 같은 경우에는 인수 색인 ( ) 만 사용해야합니다 .

System.out.println(String.format("%s %s %s %2$s %s %n", "a", ";", "b", "c"));
//  "a ; b ; c"

가독성과 디버깅을 위해 공백이 추가되었습니다. 형식이 올 바르면 텍스트 편집기에서 공백을 제거 할 수 있습니다.

System.out.println(String.format("%s%s%s%2$s%s%n", "a", ";", "b", "c"));
// "a;b;c"


답변