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