दिलचस्प पोस्ट
एंड्रॉइड स्टूडियो – ऑटो पूर्ण और अन्य सुविधाएं काम नहीं कर रही हैं PowerMockito नकली एकल स्थिर विधि और वापसी वस्तु संकलक द्वारा उपयोग किए गए C ++ मानक के संस्करण का निर्धारण कैसे करें? कैसे केवल एकल उद्धरणों से बचने के लिए? मैं नए PostgreSQL JSON डेटाटाइप के अंदर फ़ील्ड का प्रयोग कैसे करूं? क्यूटी: एकल उदाहरण ऐप सुरक्षा के लिए सर्वश्रेष्ठ अभ्यास क्यूटी क्रिएटर में पथ कैसे शामिल करें? सी # में सेलेनियम वेबड्राइवर का उपयोग करके जावास्क्रिप्ट निष्पादित करें पूर्ववत करें, बूंद राज्य को रेपो कैसे लाएं स्प्रिंग बूट युद्ध टोमकट पर तैनात MVC5 के साथ async का उपयोग करने का क्या लाभ है? वेबव्यू में स्क्रॉल करना अक्षम करें? कैसे मैं MySQL में विशेष वर्णों से बच सकता हूं? सी ++ 11 में पास-बाय-मान उचित उचित है? कैसे शैली UITextview गोल राइट पाठ क्षेत्र की तरह करने के लिए?

कुछ विभाजक के साथ स्ट्रिंग कैसे विभाजित किया जा सकता है लेकिन जावा में उस विभाजक को हटाए बिना?

मुझे विभाजन String में समस्या का सामना करना पड़ रहा है।

मैं String को कुछ विभाजक के साथ विभाजित करना चाहता हूं लेकिन उस विभाजक को खोने के बिना

जब हम जावा में somestring.split(String separator) विधि का उपयोग करते हैं, तो यह String को विभाजित करता है लेकिन String से विभाजक भाग को हटा देता है। मैं ऐसा नहीं करना चाहता हूँ

मुझे नीचे दिए गए परिणाम चाहिए:

 String string1="Ram-sita-laxman"; String seperator="-"; string1.split(seperator); 

आउटपुट:

 [Ram, sita, laxman] 

लेकिन मैं इसके बजाय नीचे की तरह एक परिणाम चाहता हूँ:

 [Ram, -sita, -laxman] 

क्या इस तरह से उत्पादन प्राप्त करने का कोई तरीका है?

वेब के समाधान से एकत्रित समाधान "कुछ विभाजक के साथ स्ट्रिंग कैसे विभाजित किया जा सकता है लेकिन जावा में उस विभाजक को हटाए बिना?"

 string1.split("(?=-)"); 

यह काम करता है क्योंकि split वास्तव में एक नियमित अभिव्यक्ति लेता है जो वास्तव में आप देख रहे हैं वह "शून्य चौड़ाई वाला सकारात्मक रूप" है

मुझे और अधिक समझने में खुशी होगी लेकिन मेरी बेटी चाय पार्टी खेलना चाहती है। 🙂

संपादित करें: वापस!

इसे समझाने के लिए, मैं आपको पहले एक अलग split कार्रवाई दिखाऊंगा:

 "Ram-sita-laxman".split(""); 

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

 ["", "R", "a", "m", "-", "s", "i", "t", "a", "-", "l", "a", "x", "m", "a", "n"] 

अब, मैं अपने नियमित अभिव्यक्ति ( "" ) को केवल शून्य-लंबाई वाले तारों के साथ बदलता हूं यदि वे एक डैश द्वारा पीछा करते हैं

 "Ram-sita-laxman".split("(?=-)"); ["Ram", "-sita", "-laxman"] 

उस उदाहरण में ?= अर्थ है "लुकआहेड" अधिक विशेष रूप से, इसका अर्थ " सकारात्मक नक्षत्र" है क्यों "सकारात्मक"? क्योंकि आप भी नकारात्मक लुकआउट ( ?! ) कर सकते हैं जो प्रत्येक शून्य-लंबाई वाली स्ट्रिंग पर विभाजित होगा जो एक डैश द्वारा नहीं किया जाता है:

 "Ram-sita-laxman".split("(?!-)"); ["", "R", "a", "m-", "s", "i", "t", "a-", "l", "a", "x", "m", "a", "n"] 

आप भी सकारात्मक देख सकते हैं ( ?<= ) जो प्रत्येक शून्य-लंबाई वाली स्ट्रिंग पर विभाजित होगा जो कि डैश से पहले है:

 "Ram-sita-laxman".split("(?<=-)"); ["Ram-", "sita-", "laxman"] 

अंत में, आप भी नकारात्मक नजरिए ( ?<! ) कर सकते हैं जो प्रत्येक शून्य-लंबाई वाली स्ट्रिंग पर विभाजित होगा जो एक डैश से पहले नहीं है :

 "Ram-sita-laxman".split("(?<!-)"); ["", "R", "a", "m", "-s", "i", "t", "a", "-l", "a", "x", "m", "a", "n"] 

इन चार अभिव्यक्तियों को सामूहिक रूप से रूपों के रूप में जाना जाता है।

बोनस: उन्हें एक साथ लाना

मैं हाल ही में एक ऐसे उदाहरण को दिखाना चाहता था जो दो तरह के रूपों को जोड़ता है। मान लीजिए आप अपने कैकपैलिक कैस पहचानकर्ता को अपनी टोकन में विभाजित करना चाहते हैं:

 "MyAwesomeClass" => ["My", "Awesome", "Class"] 

आप इस नियमित अभिव्यक्ति का उपयोग करके इसे पूरा कर सकते हैं:

 "MyAwesomeClass".split("(?<=[az])(?=[AZ])"); 

यह हर शून्य-लंबाई वाली स्ट्रिंग पर विभाजित होता है जो पहले से कम केस अक्षर ( (?<=[az]) (?=[AZ]) ) और उसके बाद एक ऊपरी कैस अक्षर ( (?=[AZ]) ) के द्वारा होता है।

यह तकनीक भी ऊंट के साथ काम करता हैजिस पहचानकर्ता

यह थोड़ा ढीला है, लेकिन आप एक प्रतिस्थापन समारोह का उपयोग कर एक डमी विभाजक परिचय कर सकते हैं। मैं जावा विधियों को नहीं जानता, लेकिन सी # में ऐसा कुछ हो सकता है:

 string1.Replace("-", "#-").Split("#"); 

बेशक, आपको एक डमी सेपरेटर चुनने की आवश्यकता होती है जो स्ट्रिंग में कहीं और न होने की गारंटी है।

ऐसा करने का एक तरीका आपकी स्ट्रिंग को विभाजित करना है, फिर पहले विभाजित किए गए प्रत्येक निकाले स्ट्रिंग की शुरुआत में अपने विभाजक को जोड़ें।

 seperator="-"; String[] splitstrings = string1.split(seperator); for(int i=1; i<splitstring.length;i++) { splitstring[i] = seperator + splitstring[i]; } 

यह लिडाराइडर के उत्तर के लिए उपयुक्त है।

एडम सिर पर कील मारा! मैंने अपने जवाब का उपयोग यह जानने के लिए किया कि फ़ाइल संवाद ब्राउजर से फाइलनाम टेक्स्ट को एक अमीर टेक्स्ट बॉक्स में कैसे डालें। मैं जिस समस्या में था, वह था जब मैं फ़ाइल स्ट्रिंग में "\" पर एक नई पंक्ति जोड़ रहा था String.split कमांड \ "\" और इसे हटाने से बंट गया था। एडम के कोड के मिश्रण का उपयोग करने के बाद, मैं फ़ाइल नाम में प्रत्येक के बाद एक नई पंक्ति बनाने में सक्षम था।

यहां मैंने उपयोग किया हुआ कोड है:

 OpenFileDialog fd = new OpenFileDialog(); fd.Multiselect = true; fd.ShowDialog(); foreach (string filename in fd.FileNames) { string currentfiles = uxFiles.Text; string value = "\r\n" + filename; //This line allows the Regex command to split after each \ in the filename. string[] lines = Regex.Split(value, @"(?<=\\)"); foreach (string line in lines) { uxFiles.Text = uxFiles.Text + line + "\r\n"; } } 

का आनंद लें!

Walrusking