2014-10-08 5 views
12

मैं स्वीडिश स्थान का उपयोग कर इस कोड का उपयोग जावा में एक लंबा करने के लिए एक स्ट्रिंग (14 123) पार्स करने की कोशिश की 14 है (यह 14123 होना चाहिए)। this question के अनुसार मैंने sv और sv_SE लोकेल दोनों के साथ प्रयास किया लेकिन इस बार परिणाम दोनों मामलों में समान था।पार्स स्ट्रिंग लांग करने के लिए एक निर्दिष्ट स्थान का उपयोग कर (sv) और NumberFormat

http://www.localeplanet.com/java/sv/index.html और http://www.localeplanet.com/java/sv-SE/index.html समूहीकरण विभाजक दोनों ही मामलों में के अनुसार एक अंतरिक्ष () तो क्यों लंबे पार्स करने के लिए स्ट्रिंग स्थान के लिए एक प्रबंधन नहीं करती है, ठीक से प्रारूपित डबल मूल्य स्ट्रिंग के रूप में जमा है?

+0

तो जावा में स्वीडिश लोकेल में एक बग? –

+3

मेरे लिए यह प्रश्न और उत्तर नीचे के रूप में चिह्नित एक से बेहतर है। मुझे नहीं लगता कि यह सवाल बंद होना चाहिए। – Jayan

उत्तर

12

स्वीडिश, फ्रेंच के रूप में भी, एक कठिन की जरूरत है। मानक या स्थायी जगह।

longString = longString.replace(' ', '\u00a0'); 

बोझिल।

+0

अब मुझे यह मिल गया है :) – GameDroids

+1

@GameDroids हां समूह को विभाजित करने के रूप में एक गैर-ब्रेकिंग स्पेस का उपयोग करने के लिए काफी भ्रामक डिजाइन निर्णय। हो सकता है कि वे 'प्रारूप' जेनरेट की गई संख्याओं पर शब्द-ब्रेक को रोकना चाहते थे। –

0

क्या आप

पार्स जो मैन्युअल रूप से DecimalFormat सेट करने के साथ स्ट्रिंग कर सकते हैं। इसे बनाएं, सेट ग्रुपिंग यूएसएड (सही), सेटडिसीमल सिम्बोल्स अपने DecimalFormatSymbols के साथ कॉन्फ़िगर करें।

DecimalFormat df=new DecimalFormat(); 
df.setGroupingSize(3); 
df.setGroupingUsed(true); 
DecimalFormatSymbols newSymbols=new DecimalFormatSymbols(); 
newSymbols.setGroupingSeparator(' '); 
df.setDecimalFormatSymbols(newSymbols); 
df.parse(longString) 

दूसरा विकल्प आपके कोड को डीबग करना है, आपके पास स्वीडिश नम्बरफॉर्मैट उदाहरण है। फील्ड ग्रुपिंग का निरीक्षण करें आकार, दशमलवफॉर्मैट सिम्बोल्स.groupingSeparators।

0

जैसा कि this post में देखा गया है, आपको व्हाइटपर को मैन्युअल रूप से एक सेपरेटर के रूप में सेट करने की आवश्यकता है।

try { 
     String longString = "14 123";    
     DecimalFormat decimalFormat = new DecimalFormat(); // instead of NumberFormat, use DecimalFormat 
     DecimalFormatSymbols symbols = new DecimalFormatSymbols(new Locale("sv", "SE")); 
     symbols.setGroupingSeparator(' '); // set the whitespace manually as grouping seperator 
     decimalFormat.setDecimalFormatSymbols(symbols);   
     System.out.println(svSE.parse(longString)); 
    } catch (ParseException ex) { 
     Logger.getLogger(Playground.class.getName()).log(Level.SEVERE, null, ex); 
    } 

    //> output is 14123 

ईमानदार मैं एक छोटे से उलझन में हूँ हो सकता है, लेकिन मुझे लगता है मुद्दा है, कि तुम स्वरूपित तार की जरूरत

try { 
     long testNumber = 123987l; 
     NumberFormat swedishNumberFormat = NumberFormat.getInstance(new Locale("sv")); 

     //here I format the number into a String 
     String formatedString = swedishNumberFormat.format(testNumber); 
     System.out.println(formatedString); // result: "123 987" 

     // when parsing the formated String back into a number 
     System.out.println(swedishNumberFormat.parse(formatedString)); // result: "123987" 

     // but when parsing a non formated string like this one 
     System.out.println(swedishNumberFormat.parse("123 987")); // result "123" 
} catch (ParseException ex) { 
     Logger.getLogger(Playground.class.getName()).log(Level.SEVERE, null, ex); 
} 

(जाहिरा तौर पर नहीं हर खाली स्थान के यहाँ एक ही है) कृपया अगर मैं यहां गलत हूं या मेरा उदाहरण काम नहीं करता है तो मुझे सही करें। मेरे पास कोई विचार नहीं है कि यह इस तरह की चीजें क्यों करता है, लेकिन ऊपर की तरह भ्रमित परिस्थितियों से बचने के लिए, आप विभाजक को मैन्युअल रूप से सेट करना चाहते हैं।

संपादित

रूप Joop Eggen उसकी answer में कहा गया है स्ट्रिंग एक सरल खाली स्थान के के बजाय एक कठिन, नॉन-ब्रेकिंग स्पेस ('\u00a0') का उपयोग करने की जरूरत है। यही कारण है कि मेरा उदाहरण अंतिम पंक्ति में "123" देता है (मैंने केवल सामान्य सफेद जगह का उपयोग किया)।

संबंधित मुद्दे