2012-11-28 18 views
18

क्या कोई रेगेक्स है जो String.split() के साथ काम करता है ताकि स्ट्रिंग को संगत वर्णों में तोड़ दिया जा सके - यानी विभाजित करें जहां अगला चरित्र पिछले चरित्र से अलग है?संगत वर्णों के स्ट्रिंग निकालने के लिए स्प्लिट रेगेक्स

यहाँ परीक्षण का मामला है:

String regex = "your answer here"; 
    String[] parts = "aaabbcddeee".split(regex); 
    System.out.println(Arrays.toString(parts)); 

अपेक्षित उत्पादन:

[aaa, bb, c, dd, eee] 

हालांकि परीक्षण का मामला केवल इनपुट के रूप में अक्षरों में है, यह स्पष्टता के लिए ही है; इनपुट वर्ण कोई वर्ण हो सकता है।


कृपया लूप या अन्य तकनीकों को शामिल करने वाले "कार्य-आसपास" प्रदान न करें।

प्रश्न ऊपर दिखाए गए कोड के लिए सही रेगेक्स ढूंढना है - यानी केवल split() का उपयोग करना और कोई अन्य विधि कॉल नहीं। यह कोड खोजने के बारे में कोई सवाल नहीं है जो "नौकरी करेगा"।

उत्तर

23

यह एक कदम में बंटवारे के लिए रेगुलर एक्सप्रेशन से लिखने के लिए पूरी तरह से संभव है:

"(?<=(.))(?!\\1)" 

के बाद से आप एक ही पात्रों में से हर समूह के बीच विभाजित करना चाहते हैं, हम सिर्फ 2 समूहों के बीच सीमा के लिए देखने की जरूरत है। मैं पिछले चरित्र को पकड़ने के लिए सकारात्मक दिखने के पीछे इसे प्राप्त करता हूं, और यह देखने के लिए कि अगला चरित्र एक ही चरित्र नहीं है, एक नकारात्मक लुक-आगे और बैक-रेफरेंस का उपयोग करें।

जैसा कि आप देख सकते हैं, रेगेक्स शून्य-चौड़ाई है (केवल 2 बार दावे के चारों ओर देखो)। रेगेक्स द्वारा कोई चरित्र नहीं खाया जाता है।

+2

+1 [सफलता] (http://ideone.com/BFRhjZ)। – nickb

+1

+1 अच्छा है, मैं भविष्य के लिए इसका एक नोट बनाउंगा। – arshajii

+0

ओह, अच्छा! :) +1 और – Amadan

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