दिलचस्प पोस्ट
यह चार क्या है? 65279 '' मैक उपयोगकर्ता और वॉर्निंग प्राप्त करना: नोकोगिरि को लिबक्सएमएल संस्करण 2.7.8 के खिलाफ बनाया गया था, लेकिन गतिशील रूप से लोड 2.7.3 स्काला में java.String.format का उपयोग कैसे करें? पायथन मल्टीप्रोसेसिंग और एक साझा काउंटर आप अपाचे में अधिकतम कनेक्शन की अधिकतम संख्या कैसे बढ़ाते हैं? मैं कोड को किस विधानसभा का पथ प्राप्त कर सकता हूं? एचटीएमएल डेटा में कन्वर्ट: जावास्क्रिप्ट का उपयोग कर टेक्स्ट / एचटीएमएल लिंक मैं datetime.strptime के साथ अवधि (AM / PM) के लिए कैसे खाता करूं? क्या "n * (रैंड (/ RAND_MAX)" एक विषम यादृच्छिक संख्या वितरण करना है? डायनेमिक अर्रेइस्ट आइटम प्रकार के साथ जीएसन टाइपटोकन नापसंद नोट के बिना पुराने और नए एपीआई संस्करणों का समर्थन करने के लिए एंड्रॉइड के कैमरा या कैमरा 2 एपीआई का उपयोग कैसे करें? हेडर और क्लाइंट लायबरी छोटे संस्करण बेमेल फ़ॉर्म डेटा सबमिट करने और प्रमाणित करने के लिए अजगर और मैकेनिक का उपयोग करना Git-SVN के साथ एक गैर-मानक एसएनएन भंडार क्लोनिंग HTML कैनवास में लिंक बनाएं

एक स्ट्रिंग विभाजित करें, प्रत्येक एनएस्ट स्थिति पर

मैं हर regex का प्रयोग प्रत्येक स्ट्रिंग को तीसरे स्थान पर विभाजित करने के लिए करता हूं:

String []thisCombo2 = thisCombo.split("(?<=\\G...)"); 

जहां जी के बाद 3 बिंदुएं विभाजित करने के लिए हर एनएस्ट स्थिति को इंगित करती हैं। इस स्थिति में, 3 डॉट्स प्रत्येक 3 पदों से संकेत मिलता है। एक उदाहरण:

 Input: String st = "123124125134135145234235245" Output: 123 124 125 134 135 145 234 235 245. 

मेरा प्रश्न यह है, मैं उपयोगकर्ता को उन पदों की संख्या को कैसे नियंत्रित करूं जहां स्ट्रिंग को विभाजित किया जाना चाहिए? दूसरे शब्दों में, मैं उन 3 बिंदुओं को कैसे कर सकता हूं, जो उपयोगकर्ता द्वारा नियंत्रित है?

वेब के समाधान से एकत्रित समाधान "एक स्ट्रिंग विभाजित करें, प्रत्येक एनएस्ट स्थिति पर"

बड़े प्रदर्शन में सुधार के लिए, विकल्प एक लूप में substring() का उपयोग करना होगा:

 public String[] splitStringEvery(String s, int interval) { int arrayLength = (int) Math.ceil(((s.length() / (double)interval))); String[] result = new String[arrayLength]; int j = 0; int lastIndex = result.length - 1; for (int i = 0; i < lastIndex; i++) { result[i] = s.substring(j, j + interval); j += interval; } //Add the last bit result[lastIndex] = s.substring(j); return result; } 

उदाहरण:

 Input: String st = "1231241251341351452342352456" Output: 123 124 125 134 135 145 234 235 245 6. 

यह स्टीवल्ल्स के समाधान के रूप में छोटा नहीं है, लेकिन यह अधिक कुशल (नीचे देखें) और मुझे लगता है कि भविष्य में आपकी स्थिति के आधार पर समायोजित करना आसान होगा।


प्रदर्शन परीक्षण (जावा 7u45)

2,000 वर्ण लंबा स्ट्रिंग – अंतराल 3 है

split("(?<=\\G.{" + count + "})") प्रदर्शन (मिलिसेकंड्स में):

 7, 7, 5, 5, 4, 3, 3, 2, 2, 2 

splitStringEvery() ( substring() ) प्रदर्शन (miliseconds में):

 2, 0, 0, 0, 0, 1, 0, 1, 0, 0 

2,000,000 वर्ण लंबा स्ट्रिंग – अंतराल 3 है

split() प्रदर्शन (मिलिसेकंड्स में):

 207, 95, 376, 87, 97, 83, 83, 82, 81, 83 

splitStringEvery() प्रदर्शन ( splitStringEvery() में):

 44, 20, 13, 24, 13, 26, 12, 38, 12, 13 

2,000,000 वर्ण लंबी स्ट्रिंग – अंतराल 30 है

split() प्रदर्शन (मिलिसेकंड्स में):

 103, 61, 41, 55, 43, 44, 49, 47, 47, 45 

splitStringEvery() प्रदर्शन ( splitStringEvery() में):

 7, 7, 2, 5, 1, 3, 4, 4, 2, 1 

निष्कर्ष:

splitStringEvery() विधि बहुत तेजी से ( जावा 7u6 में परिवर्तन के बाद भी) है, और जब अंतराल उच्च हो जाते हैं तब यह बढ़ जाती है

टेडी कोड का उपयोग करने के लिए तैयार है:

pastebin.com/QMPgLbG9

आप ब्रेस ऑपरेटर का इस्तेमाल संख्या की संख्या को निर्दिष्ट करने के लिए कर सकते हैं, जो कि एक चरित्र होना चाहिए:

 String []thisCombo2 = thisCombo.split("(?<=\\G.{" + count + "})"); 

ब्रेस एक आसान उपकरण है क्योंकि आप इसका उपयोग सटीक गणना या श्रेणियों को निर्दिष्ट करने के लिए कर सकते हैं।

Google Guava का उपयोग करके, आप Splitter.fixedLength () का उपयोग कर सकते हैं

एक फाड़नेवाला देता है जो दी गई लंबाई के टुकड़ों में तार बांटता है

 Splitter.fixedLength(2).split("abcde"); // returns an iterable containing ["ab", "cd", "e"]. 

यदि आप उस regex स्ट्रिंग को बनाना चाहते हैं तो आप एक पैरामीटर के रूप में विभाजन की लंबाई निर्धारित कर सकते हैं।

 public String getRegex(int splitLength) { StringBuilder builder = new StringBuilder(); for (int i = 0; i < splitLength; i++) builder.append("."); return "(?<=\\G" + builder.toString() +")"; } 
 private String[] StringSpliter(String OriginalString) { String newString = ""; for (String s: OriginalString.split("(?<=\\G.{"nth position"})")) { if(s.length()<3) newString += s +"/"; else newString += StringSpliter(s) ; } return newString.split("/"); }