java 6 matcher class -


मेरे पास एक स्ट्रिंग है जो निम्नानुसार है:

  TEST | A || B | C | ** "" ** | डी | "" ||||| \ r \ n परीक्षा | जेड || वी | पी | ** "" ** | वाई |||||||| \ r \ n < / कोड>  

मुझे 5 वीं और 6 वें संस्करण के बीच सामग्री बनाने की आवश्यकता है I रिक्त करने के लिए अगर सामग्री "" है तो वांछित आउटपुट <प्री> <कोड> टेस्ट | ए || बी | सी || डी | "" ||||| \ r \ n टेस्ट | जेड || वी | पी || वाई | इसलिए, मैं इस रीजक्स पैटर्न का उपयोग कर matcher / pattern और matcher.replaceFirst () का उपयोग कर रहा हूं:

   
  स्ट्रिंग regexPattern = "परीक्षा। * \\ | ([| \\ |] *) \\ | ([| \\ |] *) \\ | ([| \\ |] *) \\ | ([| \ \ | | *) \\ | \ "\" \\ | ([| \\ |] *) " 

हालांकि मैं केवल 5 वें और 6 वें संस्करण में चाहता हूं | निशाना बनाया जा सकता है, यह सब कुछ "" को बदल रहा है जो इसे रिक्त स्थान तक पहुंचता है।

तो उत्पादन निम्नानुसार है:

  TEST | A || B | C || डी |||||| \ r \ n परीक्षा | जेड || वी | पी || वाई |||||||| \ r \ n  

मैं नहीं हूं मुझे यकीन है कि अगर मेरे पास regex पैटर्न बदलने की जरूरत है? या मैचर क्लास को यह बताने का एक तरीका है कि यह बताता है कि एक बार जब यह पहले बदलता है, तो उस मिलान वाले पैटर्न में "" अन्य नहीं बदलते हैं, बल्कि इसे टेस्ट के टुकड़े के दूसरे संस्करण में बदलते हैं, यदि ऐसा है तो कैसे?

< H3> अपडेट:

समझ गया मेगा भ्रम के लिए बेहद खेद है मैं इसे जितना संभव हो उतना सटीक / स्पष्ट करने के लिए अपने स्तर की सर्वश्रेष्ठ कोशिश करूँगा।

प्रश्न rephrased:

मैं जावा पैटर्न और matcher का उपयोग कर एक स्ट्रिंग में खोज के लिए एक पैटर्न का उपयोग करना चाहता हूँ वर्ग।

स्ट्रिंग में दो लाइनें हैं और प्रत्येक पंक्ति \ r \ n \

द्वारा सरल रूप से अलग किया गया है:

टेस्टस्ट्रिंग सामग्री:

  परीक्षा >> जून 1 | जंका 2 | जून 3 | JUNK4 | "" | जूनक 6 | "" | जूनके 8 टेस्ट | जून 1111 जून 11 जून 1 जून 2014 | जूनके 16 |  

मुझे "" जो JUNK4 के बाद है (लाइन के 5 वें और 6 वें संस्करण के बीच की सामग्री) उपर्युक्त उदाहरण में रिक्त / रिक्त बना दिया जाए मुझे उस पंक्ति के दूसरे पदों में बदलाव नहीं करना है

  स्ट्रिंग regexPattern =   

इस प्रकार मैं जावा Matcher और पैटर्न वर्गों के संयोजन के रूप में निम्नलिखित regex पैटर्न का उपयोग कर रहा हूँ:

  स्ट्रिंग regexPattern = "टेस्ट * \\ | ([| \\ |] *) (\।" \ ") ([| \\ |] *) \\ |";  

लेकिन यह प्रत्येक पंक्ति में सभी घटनाओं को बदल रहा है और यह मेरी आवश्यकता के अनुसार नहीं है

मैंने क्वांटिफ़ायर / POSIX {1} की कोशिश की, लेकिन व्यर्थ सोच में कि यह टेस्टएसआरआर में पहले के लिए खोज को प्रतिबंधित करेगा लेकिन व्यर्थ में।

Regex के साथ {1} उपयोग :

  स्ट्रिंग regexPattern = "परीक्षा। * \\ | ([| \\ |] *) (\" \ ") {1} ([| \\ |] *) \\ | ";  

तो पहले पैटर्न तक के टुकड़े को पाने के लिए पैटर्न में प्रतिबंध कैसे बना?

एक सरल उत्तर जटिल regexes का उपयोग नहीं करते:

  स्ट्रिंग अस्थायी [ ] = InputString.split ("\\ |"); अगर ("\" \ "" बराबर (अस्थायी [5])) {Temp [5] = ""; स्ट्रिंगबइल्डर बफ़ = नया स्ट्रिंगबिल्डर (); के लिए (स्ट्रिंग एस: अस्थायी) buf.append ("|")। अनुलग्नक (एस); इनपुट स्टिंग = बफ़। एसबस्ट्रिंग (1); }  

और भी, दूसरों को आप क्या कह रहे हैं पर ध्यान दें संपादन सुविधा का उपयोग करें, उत्तर के रूप में सुधार नहीं पोस्ट करें।


Comments