Java의 형식 문자열에서 $ 이해


84
 StringBuilder sb = new StringBuilder();
 // Send all output to the Appendable object sb
 Formatter formatter = new Formatter(sb, Locale.US);

 // Explicit argument indices may be used to re-order output.
 formatter.format("%4$2s %3$2s %2$2s %1$2s", "a", "b", "c", "d")
 // -> " d  c  b  a"

이 경우 $에 2가 추가되는 이유는 무엇입니까?

답변:


132

는 다음과 관련 2이 없습니다 $.

  • %     = 형식 문자열 시작
  • 4$   = 네 번째 인수 ( 'd')
  • 2     = 너비 2 (오른쪽 정렬)
  • s     = 문자열 유형

정말 선명한 설명 감사합니다. 그러나 % 4 $ 2s를 사용하고 내 인수 값이 'ABCDEFGH'이면 2 자만 검색하지 않습니다. 전체 문자열을 검색했습니다. 왜?
kandarp

49

2$수단 여기 목록에서 두 번째 인수를했습니다. 는 $ 다음 숫자가하지를 앞에옵니다. 마찬가지로, 4$여기에 네 번째 인수를 넣으십시오.

명확히하기 위해 %2$2s형식을 부분으로 나눌 수 있습니다.

  • % -형식 문자열임을 나타냅니다.

  • 2$ -여기에 두 번째 값 인수를 넣어야 함을 보여줍니다.

  • 2 -형식은 2 자입니다.

  • s -값을 문자열로 형식화

설명서에서 자세한 정보 찾을 수 있습니다 .


잘못된 대답이었을 때 실제로 반대 투표를 받았습니다. 지금은 정확하므로 반대표가 제거되었습니다.
Sven Lilienthal

1
@Sven-대답은 변경되지 않았습니다. 잘못 읽었을 것입니다. 콘텐츠를 추가했지만 변경하지 않았습니다.
Dave Webb

음, 제가 반대표를 던졌을 때 "2 $는 여기에 목록에서 두 번째 인수를 넣는 것을 의미합니다." 그것은 내가 정답으로 간주하는 것이 아닙니다.
Sven Lilienthal

그것은 지금도 정확하게 말하고 당신은 지금 그것이 맞다고 말했습니다.
Dave Webb

그 자체로는 틀렸거나 적어도 질문에 대한 답이 아니지만 맥락에 따라 말하면 옳습니다.
Sven Lilienthal

4

%4$2s이는 네 번째 인수를 너비 2의 문자열로 형식화하는 신호 가있는 위치 인수입니다 . 이는 소스 코드를 건드리지 않고 인수를 재정렬해야하는 지역화를위한 문자열을 제공 할 때 특히 유용합니다.

날짜 및 시간을 나타내는 데 사용되는 유형에 대한 형식 지정자는 다음 구문을 갖습니다.

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

선택 사항 argument_index은 인수 목록에서 인수의 위치를 ​​나타내는 10 진수 정수입니다. 첫 번째 인수는에서 참조 "1$"하고 두 번째 인수는에서 참조합니다 "2$". — Formatter 문서


그래도 .NET의 형식 문자열은 인수의 위치를 ​​훨씬 더 명확하게 만들기 때문에 더 좋습니다.
Joey

4

%: 형식 문자열

4$: 네 번째 값 인수

2: 너비 (인수가 인쇄 될 때 길이)

s: 문자열 인수 변환입니다.

예를 들어, 다음 스 니펫 :

StringBuffer sb=new StringBuffer();

Formatter formatter=new Formatter(sb,Locale.UK);

formatter.format("-%4$5s-%3$5s-%2$5s-%1$5s-", "a", "b", "c", "d");

System.out.println(sb);

다음과 같은 출력을 생성합니다.

-    d-    c-    b-    a-

(인수 당 5 자 너비, 공백으로 채워짐)

및 교체 5로하면 2, 다음과 같은 출력을 생성 할 것이다 :

- d- c- b- a-

차이점이 보이십니까? :)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.