2013-03-05 3 views
15

के रूप में विभाजित करना क्यों है, यह है कि आउटपुट [] है और [1] नहीं है?पाइप प्रतीक के साथ एक स्ट्रिंग को डिलीमीटर

String input="1|2|3"; 
String[] values= input.split("|"); 
System.out.println("[" + values[0] + "]"); 
// Output: [] 

हालांकि, अगर हम विभाजक बदलते हैं, तो आउटपुट [1] है।

String input="1;2;3"; 
String[] values= input.split(";"); 
System.out.println("[" + values[0] + "]"); 
// Output: [1] 
+0

'विभाजन (स्ट्रिंग)' एक 'regex स्ट्रिंग' लेता है और इस तरह के रूप '|' को 'रेगेक्स' या 'के रूप में व्याख्या किया गया है, इसलिए यह कुछ भी विभाजित नहीं करता है। आपको '|' ​​से बचकर परीक्षण करना चाहिए और 'मानों' –

+1

के मानों को जांचना चाहिए, यह प्रत्येक वर्ण को विभाजित करता है, साथ ही प्रारंभिक खाली स्ट्रिंग –

उत्तर

24

प्रयास करें कि चरित्र से बचने के लिए:

String input="1|2|3"; 
String[] values= input.split("\\|"); 
System.out.println("[" + values[0] + "]"); 
15

क्योंकि | नियमित अभिव्यक्ति में विशेष अर्थ नहीं है। आप इस तरह यह से बचने के लिए की जरूरत है: \| और जावा में आप भी बैकस्लैश से बचने के लिए के रूप में अच्छी ताकि आप \\|

पाइप चरित्र के साथ अंत एक अलगाव ऑपरेटर जिसका अर्थ है कि यह नियमित अभिव्यक्ति इंजन बताता है या तो चयन करने के लिए है इसके बाएं और दाएं पैटर्न। आपके मामले में जहां खाली तार जो कुछ भी मेल खाते हैं।

4

के बजाय \\| का उपयोग करने का प्रयास करें जब आप इसे विभाजित करने की आवश्यकता के रूप में विभाजित हों।

तो अपने कोड के लिए बदल जाएगा:

String input="1|2|3"; 
String[] values= input.split("\\|"); 
System.out.println("[" + values[0] + "]"); 
+0

यह संकलित नहीं होगा, कृपया अपना कोड जांचें। जावा में आपको भागने, विभाजित करने की आवश्यकता है ("\\ |")। –

+0

@ bmorris591 उत्तर संशोधित किया गया है। क्षमा करें मैं इसके बारे में भूल गया! – aa8y

3

आप चरित्र से बचने के लिए है '|' ठीक से

String input="1|2|3"; 
     String[] values= input.split("\\|"); 
     System.out.println("[" + values[0] + "]"); 
-2

पाइप वर्ण लॉजिकल या रेगेक्स के बराबर है। क्या तुम सच में विभाजक के रूप में पाइप चरित्र का उपयोग करना चाहते हैं, तो आप

String[] values= input.split("\|");

+1

यह संकलित नहीं होगा, कृपया अपना कोड जांचें। जावा में आपको भागने की जरूरत है, 'विभाजित करें ("\\ |") '। –

6

split विधि एक पैरामीटर को किसी रेगुलर एक्सप्रेशन प्राप्त करता है के रूप में एक \ के साथ से बचने के लिए की जरूरत है। पाइप अपने स्वयं के उद्देश्य के साथ एक आरक्षित चरित्र है (इसका मतलब है or)।

आप या तो इसे बच सकते हैं ("\\|") या, यदि आप जावा में हैं 1.5+ आप Pattern.quote("|") इस तरह उपयोग कर सकते हैं:

input.split(Pattern.quote("|")); 
संबंधित मुद्दे