간단한 질문이지만 여기에 대한 질문은 문서를 이해하려는 것보다 더 간단 할 것입니다 MessageFormat
.
long foo = 12345;
String s = MessageFormat.format("{0}", foo);
관찰 된 값은 "12,345"입니다.
원하는 값은 "12345"입니다.
간단한 질문이지만 여기에 대한 질문은 문서를 이해하려는 것보다 더 간단 할 것입니다 MessageFormat
.
long foo = 12345;
String s = MessageFormat.format("{0}", foo);
관찰 된 값은 "12,345"입니다.
원하는 값은 "12345"입니다.
답변:
그냥 사용 Long.toString(long foo)
MessageFormat.format("{0,number,#}", foo);
MessageFormat.format("{0,choice,0#no foos|1#one foo|1<'{0,number,#}' foos}"
국제화 등으로 "실제"패턴을 만들려고 할 때 약간 고생했습니다. 특히 출력이 표시되는 값에 따라 달라지는 "선택"형식을 사용할 필요가 있습니다 java.text.ChoiceFormat
.
이 작업을 수행하는 방법에 대한 예는 다음과 같습니다.
MessageFormat fmt = new MessageFormat("{0,choice,0#zero!|1#one!|1<{0,number,'#'}|10000<big: {0}}");
int[] nums = new int[] {
0,
1,
100,
1000,
10000,
100000,
1000000,
10000000
};
Object[] a = new Object[1];
for(int num : nums) {
a[0] = num;
System.out.println(fmt.format(a));
}
그러면 다음과 같은 출력이 생성됩니다. 동일한 유형의 작업을 수행하려는 다른 사용자에게 도움이되기를 바랍니다.
zero!
one!
100
1000
10000
big: 100,000
big: 1,000,000
big: 10,000,000
보시다시피 "choice"형식을 사용하면 형식을 지정하기 위해 전달되는 값에 따라 사용할 형식 유형을 선택할 수 있습니다. 작은 숫자는 텍스트로 바꿀 수 있습니다 (원래 값이 표시되지 않음). 중간 크기의 숫자는 그룹화 구분 기호없이 (쉼표없이) 표시됩니다. 가장 큰 숫자에는 다시 쉼표가 포함됩니다. 분명히 이것은의 유연성을 보여주기 위해 완전히 고안된 예제입니다 java.text.MessageFormat
.
#
형식 텍스트에 인용 된 내용에 대한 참고 : ChoiceFormat
및 둘 다 MessageFormat
사용 중이므로 둘 사이에 메타 문자간에 충돌이 있습니다. 기본적으로 "같음"을 의미하는 메타 문자로 ChoiceFormat
사용 #
하여 형식 지정 엔진이 예를 들어1#one!
들어와 비교 {0}
하는 1
경우를 인식하고 같으면 특정 "선택"을 사용합니다.
그러나 #
에 대한 또 다른 의미가 있습니다 . 그것은 MessageFormat
의미 DecimalFormat
가있는 메타 문자입니다. "여기에 숫자를 넣어 라"를 의미하는 메타 문자입니다.
ChoiceFormat
문자열로 묶여 있기 때문에 #
따옴표로 묶어야합니다. 언제ChoiceFormat
문자열을 구문 분석 완료에 서브 포맷을 통과 할 때, 그 따옴표가 제거됩니다 MessageFormat
(다음에에 DecimalFormat
).
따라서를 사용할 때 {0,choice,...}
해당 #
문자와 다른 문자 를 인용해야 합니다.
가장 짧은 방법은
long foo = 12345;
String s = ""+foo;
new StringBuilder("").append(foo).toString()
실제로 최적이 아닙니다.
""+
Long.toString()
이 솔루션이 어쨌든 백그라운드에서 사용하는 것이기 때문에 대신 사용해야 합니다. :)
String.valueOf(long)