2015-06-23 5 views
10

कृपया नीचे दिए गए कोड को देखने -जावा स्ट्रिंग विभाजन विंडोज पर विभिन्न आउटपुट और लिनक्स देता

String s11 ="!country=India ";  
String[] ss =s11.split("((?<=[!&|])|(?=[!&|]))"); 
System.out.println(ss.length); 
for(String s :ss) { 
    System.out.println(s); 
} 

Windows पर यह देता है

2 
! 
country=India 

जबकि Ubuntu के साथ यह

3 

! 
country=India 

देता है वह क्यों होगा?

+9

दोनों प्लेटफ़ॉर्म के लिए जावा संस्करण क्या है, के साथ अपने JVM के संस्करण को दोबारा जांच सकते हैं? –

+1

उबंटू के लिए आउटपुट का नया लाइन हिस्सा है? – Aderis

+0

यह आपको तीन हिस्सों, '!' से पहले एक पर विभाजित करेगा और एक के बाद '!'। मुझे नहीं पता कि जावा पहली खाली स्ट्रिंग कैसे लेता है। –

उत्तर

7

यह व्यवहार नहीं अलग ऑपरेटिंग सिस्टम की वजह से है, लेकिन JVM की संभावना विभिन्न संस्करणों किया जाता है।

यह "व्यवहार परिवर्तन" का कारण बना है कीड़े जावा 8.

प्रलेखन JDK 8 के लिए अद्यतन किया गया है, और यह भी लंबाई in this question, जहां जावा 8 में विभाजन पर रिक्त स्ट्रिंग को हटा पर चर्चा की है के लिए filed incorrectly होने के लिए परिणाम सरणी की शुरुआत। यही कारण है कि ! से पहले अतिरिक्त खाली स्ट्रिंग नहीं बनाई गई है (इसलिए 2 की बजाय 2 की लंबाई)।

सूचना split() विधि in Java 7 के लिए दस्तावेज़ में अंतर और Java 8 में Pattern वर्ग के लिए, और स्ट्रिंग वर्ग (Java 7, Java 8) क्रमशः। इस पर और जानकारी के लिए जुड़े मूल प्रश्न देखें।

मैंने जावा 7: सूर्य-जेडीके-1.7.0_10 (ideone) और जावा 8 सूर्य-जेडीके -8u25 (ideone) पर भी इस समस्या को पुन: उत्पन्न किया है। See the Java versions here.जावा 8 का विभाजन सरणी में अतिरिक्त खाली स्ट्रिंग नहीं जोड़ देगा, जबकि जावा 7 का विभाजन होगा।

यह सिस्टम लिनक्स या विंडोज़ की वजह से नहीं बल्कि बल्कि जेवीएम संस्करण है। आप java -version

+0

धन्यवाद ...ऐसा लगता है ... मैंने अपने विचार पर विचार किया लेकिन 7 और 8 दोनों ने मुझे एक ही परिणाम दिया (कोई अतिरिक्त लाइन नहीं), लेकिन फिर मैंने सिर्फ आपके लिंक को फोर्क किया और कोशिश की और देखा कि आपने क्या कहा ... मदद के लिए धन्यवाद। – user2931444

+0

@ user2931444 खुशी है कि आपने इस मुद्दे को हल किया है, यह एक दिलचस्प व्यवहार है जिसे आपने पाया है। अगर यह सही उत्तर है और मदद मिली है तो एक जवाब स्वीकार करना न भूलें! एसओ में आपका स्वागत है – matrixanomaly

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