2015-11-03 4 views
5

यदि मैं फ़्रांस/फ्रेश लोकेल में किसी नंबर को रूपांतरित करता हूं तो इसे हजारों विभाजक के रूप में स्थान का उपयोग करना चाहिए। यदि मैं कुछ अन्य पात्रों के साथ रिक्त स्थान को प्रतिस्थापित करने का प्रयास करता हूं, तो उसे कोई स्थान नहीं मिलता है।जावा फ़्रांस/फ़्रेंच लोकेल हजारों विभाजक अंतरिक्ष की तरह दिखता है लेकिन वास्तव में

String input = NumberFormat.getNumberInstance(Locale.FRANCE).format(123123123); 
System.out.println("String after conversion in locale "+input); 
input = input.replace(" ", "."); 
System.out.println("After replace space with dot  "+input); 

आउटपुट

String after conversion in locale 123 123 123 
After replace space with dot  123 123 123 

तो हालांकि विभाजक अंतरिक्ष की तरह दिखता है यह कुछ अलग है। सटीक चरित्र क्या है? मैं input.replace() में उस वर्ण को कैसे निर्दिष्ट कर सकता हूं ताकि मैं इसे डॉट के साथ बदल सकूं?

+2

क्यों एक नंबर फ़ॉर्मेटर एक बिंदु का उपयोग करता है के लिए सेट नहीं इस प्रकार है? –

+0

@mlk मेरा कोड फ़्रांस स्वरूपित स्ट्रिंग प्राप्त करता है। मैं इसे बदलना चाहता हूँ। तो यह कोड सिर्फ पूरे प्रवाह दिखा रहा है। –

+1

मैं इसे एक संख्या में परिवर्तित करने के लिए बहुत मोहक होगा (जैसा कि आप इसके साथ काम कर रहे हैं) फिर इसे स्ट्रिंग मैनिपुलेशन करने के बजाए प्रारूप में एक स्ट्रिंग में कनवर्ट करें। यह स्ट्रिंग्स का उपयोग करने के विरोधी पैटर्न के बहुत करीब महसूस करता है जब वस्तुओं को और अधिक समझ में आता है। –

उत्तर

1

उसके जवाब में Joop Eggen द्वारा सुझाव दिया गया है यह \u00a0 नॉन-ब्रेकिंग स्पेस है।

एक काम के रूप में चारों ओर, मैं हजार विभाजक के रूप में

String input = NumberFormat.getNumberInstance(Locale.FRANCE).format(123123123); 
System.out.println("String after conversion in locale "+input); 

DecimalFormat df = (DecimalFormat) NumberFormat.getNumberInstance(Locale.FRANCE); 
DecimalFormatSymbols symbols = df.getDecimalFormatSymbols(); 
char thousandSep = symbols.getGroupingSeparator(); 

input = input.replace(thousandSep, '.'); 

यह काम अपेक्षा के अनुरूप

String after conversion in locale 123 123 123 
After replace space with dot  123.123.123 
8

यह \u00a0 गैर-ब्रेकिंग स्पेस है, जो राशि के लिए समझ में आता है। (एक लाइन के अंत में € 40 की कल्पना करें, और अगले 000 के साथ शुरू करें।) कुछ अन्य भाषाओं के लिए समान है।

input = input.replace('\u00a0', '.'); 
संबंधित मुद्दे