दिलचस्प पोस्ट
जावा का उपयोग कर सेलेनियम वेबड्राइवर में एक ड्रॉपडाउन मूल्य का चयन कैसे करें कैसे सी # में integers के अनुक्रम के साथ सरणी बनाने के लिए? SQL सर्वर में फ़ाइलों को संग्रहीत करना विदेशी मुद्रा का अजीब व्यवहार हेडर के साथ HTTP GET अनुरोध भेजें SOAP क्लाइंट में .NET- संदर्भ या उदाहरण? क्या कोई अच्छा पायथन लाइब्रेरी है जो सी ++ को पार्स कर सकती है? क्यों किसी भी प्रकार एक बाउंड रिटर्न के साथ इस सामान्य विधि कर सकते हैं? सी # का उपयोग करके मेरी स्ट्रिंग मैच करने के लिए मैं कॉम्बो बॉक्स में चुने गए आइटम को कैसे सेट करूं? क्यों सी # XmlDocument.LoadXml (स्ट्रिंग) विफल हो जाता है जब एक XML शीर्षलेख शामिल है? AngularJS + Django Rest Framework + CORS (CSRF कुकी क्लाइंट में प्रदर्शित नहीं हो रही है) क्वालिफ़ार्स त्रुटि का त्याग 1 प्रतिबद्ध द्वारा वापस स्थानीय और दूरस्थ जीआईटी भंडार रोलिंग जावास्क्रिप्ट में GUID / यूयूआईडी बनाएँ? `Std :: move` नामित` std :: move` क्यों है?

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

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

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

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

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

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

Solutions Collecting From Web of "एक स्ट्रिंग विभाजित करें, प्रत्येक एनएस्ट स्थिति पर"

बड़े प्रदर्शन में सुधार के लिए, विकल्प एक लूप में 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("/"); }