मैं जावा में विभाजक के बिना स्ट्रिंग के रूप में एक लंबे पूर्णांक को कैसे प्रारूपित करूं?


122

आसान सवाल है, लेकिन मैं शर्त लगा सकता हूँ कि यहाँ पर पूछना शायद दस्तावेज़ को समझने की कोशिश करने की तुलना में अधिक सीधे आगे होगा MessageFormat:

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

देखा गया मान "12,345" है।

वांछित मूल्य "12345" है।

जवाबों:


62

महज प्रयोग करें Long.toString(long foo)


12
याString.valueOf(long)
rsp

6
String.valueOf () कॉल Long.toString ()
पीटर लॉरी

7
हो सकता है कि यह ट्रिफ़्लिंग हो लेकिन इस मामले में आप Long.toString (foo) के अनैच्छिक व्यवहार पर भरोसा कर रहे हैं। उस कारण से, मैं डैनियल फोर्टुनोव के जवाब को पसंद करता हूं।
जॉन के

4
यह अनिर्दिष्ट नहीं है। डाउनलोड देखें .oracle.com/ javase/6/docs/ api/ java/ lang/…
रोब एच

3
ठीक है, हालाँकि यह समाधान संसाधनबंडले में संदेश स्वरूपण के लिए लागू नहीं है। Tuto i18n
Guillaume Husta

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

1
धन्यवाद, मैं MessageFormat गुण इंजेक्शन के साथ ऐसा करने की कोशिश कर रहा था। अच्छी बात यह करने का एक से अधिक तरीका है!
फीलिप बसबी

3
मैं इस तरह से पसंद करता हूं। चूंकि यह मुझे अपनी भाषा गुण फ़ाइल में प्रारूप बदलने की अनुमति देता है।
पास्कल

2
सही समाधान! मुझे कोड स्तर के बजाय संदर्भ डेटा में प्रारूप / अनफ़ॉर्मेट विकल्प रखने में मदद मिली - धन्यवाद! और जैसा @SebastianRoth ने कहा - यह स्वीकृत उत्तर होना चाहिए था।
ओफ़र लैंडो

9
मैं वास्तव में आश्चर्यचकित हूं कि
सुंदर अंकन

1
यदि आप पैटर्न को उद्धृत करते हैं तो यह एक विकल्प प्रारूप के अंदर भी काम करता है:MessageFormat.format("{0,choice,0#no foos|1#one foo|1<'{0,number,#}' foos}"
GOTO 0

1

मैं इसके साथ थोड़ा संघर्ष करता था जब अंतर्राष्ट्रीयकरण आदि के साथ "वास्तविक दुनिया" पैटर्न करने की कोशिश कर रहा था, विशेष रूप से, हमें "पसंद" प्रारूप का उपयोग करने की आवश्यकता है जहां आउटपुट प्रदर्शित किए जा रहे मूल्यों पर निर्भर करता है, और यही है 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

जैसा कि आप देख सकते हैं, "पसंद" प्रारूप हमें फ़ॉर्मेट किए जाने वाले मूल्य के आधार पर उपयोग करने के लिए प्रारूप के प्रकार को चुनने की अनुमति देता है। छोटी संख्याओं को पाठ (मूल मूल्य का कोई प्रदर्शन नहीं) से बदला जा सकता है। मध्यम आकार की संख्याओं को बिना किसी समूह विभाजक (कोई अल्पविराम) के साथ दिखाया गया है। सबसे बड़ी संख्या में अल्पविराम शामिल हैं, फिर से। जाहिर है, यह एक लचीलेपन का प्रदर्शन करने के लिए एक पूरी तरह से वंचित उदाहरण हैjava.text.MessageFormat

#प्रारूप पाठ में उद्धृत के बारे में एक टिप्पणी : चूंकि दोनों ChoiceFormatका MessageFormatउपयोग किया जा रहा है और दोनों के बीच मेटाचैकर्स के बीच टकराव होता है। एक मेटाचैकर के रूप में ChoiceFormatउपयोग #किया जाता है जिसका अनिवार्य रूप से "बराबर" होता है ताकि फ़ॉर्मेटिंग इंजन को पता चले कि उदाहरण के लिए 1#one!हम के {0}साथ तुलना कर रहे हैं 1, और यदि वे समान हैं, तो यह उस विशेष "पसंद" का उपयोग करता है।

लेकिन #इसका एक और अर्थ है MessageFormat, और यह एक मेटाचैकर के रूप में है, जिसका अर्थ है DecimalFormat: यह एक मेटाचैकर है जिसका अर्थ है "यहां एक संख्या डालें"।

क्योंकि यह एक ChoiceFormatतार में लिपटा हुआ है , #इसे उद्धृत करने की आवश्यकता है। जब ChoiceFormatस्ट्रिंग को पार्स किया जाता है, तो उन उद्धरणों को हटा दिया जाता है जब सबफॉर्मट्स को पास किया जाता है MessageFormat(और फिर DecimalFormat)।

इसलिए जब आप उपयोग कर रहे होते हैं {0,choice,...}, तो आपको उन #पात्रों, और संभवतः दूसरों को उद्धृत करना होगा ।


0

सबसे छोटा रास्ता है

long foo = 12345;
String s = ""+foo;

3
और, हमेशा की तरह, यह new StringBuilder("").append(foo).toString()वास्तव में इष्टतम नहीं है।
रैंडर्स00

1
@ RAnders00 किसी संख्या को एक एकल स्ट्रिंग में परिवर्तित करना सबसे इष्टतम विकल्प होने की संभावना नहीं है, इस संदर्भ के आधार पर आप आमतौर पर इसे पूरी तरह से बचा सकते हैं, लेकिन सबसे सरल पैटर्न के लिए आप उपयोग कर सकते हैं""+
पीटर लॉरे

1
आप सही हैं, लेकिन मैं इसे इंगित करना चाहता था क्योंकि लोग हमेशा इसे इंगित करते हैं।
RAnders00

1
@ संदेश प्रारूप का उपयोग करके RAnders00 btw इस मामले में अधिक महंगा, और अधिक जटिल परिमाण का एक आदेश है।
पीटर लॉरी

हाँ, किसी को इसके बजाय इसका उपयोग करना चाहिए Long.toString()क्योंकि यह समाधान पृष्ठभूमि में वैसे भी उपयोग करता है :)
RAnders00


-6

तुम कोशिश कर सकते हो:

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

8
अनावश्यक वस्तु निर्माण। रैपर क्लासेस के साथ कभी भी नया प्रयोग न करें।
कीकी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.