[java] Java에서 구분 기호없이 긴 정수를 문자열로 포맷하려면 어떻게해야합니까?

간단한 질문이지만 여기에 대한 질문은 문서를 이해하려는 것보다 더 간단 할 것입니다 MessageFormat.

long foo = 12345;
String s = MessageFormat.format("{0}", foo);

관찰 된 값은 “12,345”입니다.

원하는 값은 “12345”입니다.



답변

그냥 사용 Long.toString(long foo)


답변

MessageFormat.format("{0,number,#}", foo);


답변

국제화 등으로 “실제”패턴을 만들려고 할 때 약간 고생했습니다. 특히 출력이 표시되는 값에 따라 달라지는 “선택”형식을 사용할 필요가 있습니다 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;


답변

대안으로 String.format하고 java.util.Formatter뿐만 아니라 당신을 위해 힘 작업 …


답변

시도해 볼 수 있습니다.

String s = new Long(foo).toString();


답변