2010-01-30 12 views
39

मैं एक स्ट्रिंग जो इस तरह सामग्री है विभाजित करना चाहते हैं:मैं डॉलर के चिह्न के साथ एक स्ट्रिंग क्यों विभाजित नहीं कर सकता?

a$b$c 

लेकिन जब मैं का उपयोग करें:

String data=... 
data.split("$"); 

यह $ को नहीं पहचानता है और स्ट्रिंग विभाजित नहीं है, लेकिन जब मैं कुछ लोगों द्वारा $ की जगह एक्स की तरह पत्र यह काम करता है। क्या किसी के पास कोई विचार है?

उत्तर

87

विभाजन समारोह मिलान करने के लिए एक स्ट्रिंग नहीं, एक नियमित अभिव्यक्ति लेता है। ताकि आप उस चरित्र से बचने के लिए इसे बदलने के लिए की आवश्यकता होगी - इस मामले '$' में - अपने नियमित अभिव्यक्ति विशेष वर्ण का उपयोग करता है:

String line = ... 
String[] lineData = line.split("\\$"); 

इसके अलावा कि विभाजन ध्यान दें तार की एक सरणी देता है - स्ट्रिंग्स अपरिवर्तनीय हैं, इसलिए वे संशोधित नहीं किया जा सकता है। स्ट्रिंग में किए गए किसी भी संशोधन को एक नई स्ट्रिंग में वापस कर दिया जाएगा, और मूल नहीं बदला जाएगा। इसलिए ऊपर lineData = line.split("\\$");

+4

तकनीकी रूप से, String.split() के लिए regex तर्क प्रकार स्ट्रिंग का एक ऑब्जेक्ट है। लेकिन विधि यह एक नियमित अभिव्यक्ति प्रारूप में होने की उम्मीद है। – David

+0

हां, यह सही है - क्षमा करें अगर मैंने यह स्पष्ट नहीं किया है, या अगर मैं उस कथन में उलझन में था। – aperkins

+10

स्प्लिट रिटर्न स्ट्रिंग [], स्ट्रिंग नहीं। – ColinD

3

split() पैरामीटर के रूप में एक नियमित अभिव्यक्ति का उपयोग करता है। आपको split("\\$") पर कॉल करना होगा, क्योंकि $ "लाइन के अंत" के लिए नियमित अभिव्यक्ति है।

3

जावा में String.split() एक स्ट्रिंग तर्क लेता है जो एक नियमित अभिव्यक्ति है। रेगेक्स में '$' वर्ण का अर्थ है रेखा का अंत। यदि आप स्ट्रिंग में डॉलर के चिह्न की तलाश में हैं तो आप एक एस्केप अनुक्रम ("\\ $") का उपयोग कर सकते हैं।

सूत्रों का कहना है:

String - जावा एपीआई

Pattern - जावा एपीआई

+0

मत भूलना \ अच्छी तरह से .. इसलिए बनाते हैं कि ("\\ $") – Tim

+0

@Tim से बचने के लिए - हाँ, कि मैं क्या लिखा है ... यह सिर्फ केवल ऊपर के रूप में दिखाया एक बैकस्लैश मैं अभी भी एसओ और उसके संपादक के लिए काफी नया हूँ। – David

3

$ पंक्ति के अंत का प्रतिनिधित्व नियमित अभिव्यक्ति में एक विशेष चरित्र है। एक डॉलर के चिह्न से मेल खाने के लिए, "\\$" का उपयोग करें।

13

विभाजन विधि एक स्ट्रिंग को पहले पैरामीटर के रूप में स्वीकार करती है जिसे तब नियमित अभिव्यक्ति के रूप में व्याख्या किया जाता है।

डॉलर साइन नियमित अभिव्यक्ति में एक विशिष्ट ऑपरेटर है और इसलिए आप इसे आप क्या चाहते हैं पाने के लिए इस तरह से बचने के लिए है:

String data = ... 
String[] parts = data.split("\\$"); 

या, यदि सीमांकक इस तरह से बदल सकते हैं आप अधिक सामान्य हो सकता है :

String data = ... 
String[] parts = data.split(java.util.regex.Pattern.quote("$")); 
0

आपको गैर-ब्रेकिंग रिक्त स्थान के लिए यूनिकोड वर्णों के साथ कोई समस्या हो सकती है। प्रयास करें ...

String[] elements = myString.split("[\\s\\xA0]+"); //include uniCode non-breaking 
संबंधित मुद्दे

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