2013-02-26 28 views
5

मेरे पास कुछ String एस केवल अंक हैं, और जब भी चरित्र बदलता है तो मैं इसे विभाजित करना चाहता हूं।स्प्लिट स्ट्रिंग। संभावित Regex समाधान?

उदाहरण के लिए:

  • "11101100112021120" जाता है: {"111", "11", "11", "2", "2", "11", "2"}
  • "222222222"{"222222222"}
  • "222222122" को जाता है {"222222", "1", "22"}
  • "000000000" को जाता है {}
  • "0000100000" को जाता हैको जाता है
  • "11121222212112133321" को {"111", "2", "1", "2222", "1", "2", "11", "2", "1", "333", "2", "1"}

मैं एक अच्छा तरीका यह करना चाहते हो जाता है।

मुझे इस बारे में जाने के दो तरीके पता हैं: केवल बलपूर्वक मजबूर करना, या अनुभाग द्वारा अनुभाग जोड़ना। या, मैं सभी 0 के माध्यम से जा सकता हूं और 0 के साथ प्रतिस्थापित कर सकता हूं, फिर अक्षर बदलते समय 0 जोड़ता हूं, और उसके बाद बस 0 पर विभाजित होता है, लेकिन उन दोनों तरीकों से सिर्फ गूंगा दिखता है। अगर किसी को यह करने के लिए बेहतर/सुंदर तरीका पर कोई विचार है, regex या तर्क, यह अच्छा होगा।

+0

बीटीडब्ल्यू के साथ हटा सकते हैं, Google लिंक की सराहना की जाती है। मुझे कोई भी खोज शब्द नहीं मिला जो काम करता था। इसके अलावा, मैं इन्हें एक ऐरेलिस्ट में सहेज रहा हूं या किसी अन्य आसान तरीके से उन्हें एक्सेस कर रहा हूं। –

+1

आपको अपनी आवश्यकताओं को बदलना चाहिए _ मेरे पास कुछ स्ट्रिंग्स हैं जिनमें केवल अंक हैं, और जब भी चरित्र बदलता है ** ** और आपके उदाहरणों से मेल खाने के लिए, मैं इसे विभाजित करना चाहता हूं। – jlordo

उत्तर

6

यह काम करने के लिए लगता है कि आप उम्मीद कर

data.split("0+|(?<=([1-9]))(?=[1-9])(?!\\1)"); 

टेस्ट:

String[] tests = { "11101100112021120", "222222222", "222222122", 
     "000000000", "0000100000", "11121222212112133321" }; 

for (String data : tests) { 
    System.out.println(data + " ->" + Arrays.toString(data.split("0+|(?<=([1-9]))(?=[1-9])(?!\\1)"))); 
    System.out.println("-----------------------"); 
} 

उत्पादन:

11101100112021120 ->[111, 11, 11, 2, 2, 11, 2] 
----------------------- 
222222222 ->[222222222] 
----------------------- 
222222122 ->[222222, 1, 22] 
----------------------- 
000000000 ->[] 
----------------------- 
0000100000 ->[, 1]  // <-- only problem - empty first element 
----------------------- 
11121222212112133321 ->[111, 2, 1, 2222, 1, 2, 11, 2, 1, 333, 2, 1] 
----------------------- 

दुर्भाग्य से अग्रणी शून्य अतिरिक्त रिक्त स्ट्रिंग को रोकने के लिए सरणी करने देगा। इससे छुटकारा पाने के लिए आप पहले इन शून्यों को data.replaceFirst("^0+(?=[^0])", "")

+0

यह पूरी तरह से काम करता है, बहुत बहुत धन्यवाद! –

+0

भयानक ....... – user1428716

+2

ध्यान दें कि सभी शून्यों की एक स्ट्रिंग के लिए, 'replaceFirst ("^ 0+", "") "करने से विभाजन को एक खाली स्ट्रिंग के साथ सरणी उत्पन्न करने का कारण बन जाएगा। 'प्रतिस्थापन' ("^ 0 + (? = [^ 0])", "") "को बदलने की कोशिश करें, जब स्ट्रिंग शून्य से शुरू होती है, लेकिन * सभी * शून्य नहीं होती है। – matts

2

str.split("0+|(?<=(\\d))(?!\\1)") 

प्रयास करें शून्य वाली स्ट्रिंग के लिए, आप तो सरणी के माध्यम से पुनरावृति और किसी भी खाली तत्वों को दूर करना होगा।

+1

यह कहता है कि आपके पास शून्य/खाली तत्व होंगे, जो ठीक है, हालांकि Pshemo खाली तत्व नहीं बनाता है, लेकिन आपको बहुत धन्यवाद! –

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