दिलचस्प पोस्ट
एंड्रॉइड वेबव्यू में फ़ुलस्क्रीन पर HTML5 वीडियो चला रहा है 2 सी # प्रक्रियाओं के बीच अंतर-प्रक्रिया संचार की सबसे सरल विधि क्या है? एएसपी.एन.टी. एमवीसी वेबसाइट की ओर से सेवा सेवा की नई सेवा जावास्क्रिप्ट में प्रारूप विनिर्देश के साथ मैं स्ट्रिंग को डेटटाइम में कैसे बदल सकता हूँ? क्या आपने सी ++ दुभाषियों (कंपाइलर नहीं) में से किसी का उपयोग किया है? इंटरनेट एक्सप्लोरर 10 – कैसे ग्रेस्केल फ़िल्टर लागू करें? समान सर्वर पर अपाचे और नोड। जेएस एक सर्वर से फेसबुक फैन पेज पर पोस्ट करने के लिए एक लंबे समय तक चलने वाले टोकन प्राप्त करने के कदम क्या हैं? क्या 'अस्थिर' कीवर्ड में एक कंसोल फंक्शन द्वारा संशोधित होने की अनुमति देने के अलावा कोई अन्य उद्देश्य है? इंटरफ़ेस बनाम सार कक्षा (सामान्य ओ ओ) एकाधिक फ़ाइलों को एक साथ स्ट्रट्स 2 @ एक्शन पर अपलोड करें आईओएस 10 के साथ अधिसूचना जारी करें सी # समर्थन वापसी प्रकार सह प्रकार है? समान तत्व वाली सरणी को JavaScript में कई बार दोहराएं एसक्यूएल: क्वेरी के द्वारा डिफ़ॉल्ट ऑर्डर क्या है?

स्ट्रिंग में चरित्र के nth घटना को कैसे ढूंढें?

यहां पोस्ट किए गए प्रश्न के समान, जावा में एक समाधान की तलाश है

वह है, एक स्ट्रिंग से एक चरित्र / स्ट्रिंग की nth घटना का सूचक कैसे खोजता है?

उदाहरण: " / folder1 / folder2 / folder3 / " इस मामले में, यदि मैं स्लेश (/) की तीसरी घटना की मांग करता हूं, तो यह फ़ोल्डर 3 से पहले प्रकट होता है, और मुझे उम्मीद है कि यह सूचकांक स्थिति लौटाएगी। मेरा वास्तविक इरादा यह एक चरित्र के nth घटना से substring है

क्या जावा एपीआई में उपलब्ध कोई भी सुविधाजनक / तैयार-से-उपयोग की जाने वाली विधि है या हमें इसे सुलझाने के लिए हमारे पास एक छोटा तर्क लिखने की जरूरत है?

इसके अलावा,

  1. मैंने जल्दी से खोज की है कि अपाचे कॉमन्स लैंग के स्ट्रिंग यूटिलस में इस उद्देश्य के लिए कोई भी तरीका समर्थित है, लेकिन मुझे कोई नहीं मिल रहा है
  2. क्या नियमित अभिव्यक्ति इस संबंध में मदद कर सकती है?

वेब के समाधान से एकत्रित समाधान "स्ट्रिंग में चरित्र के nth घटना को कैसे ढूंढें?"

यदि आपकी परियोजना पहले से अपाचे कॉमन्स पर निर्भर करती है तो आप StringUtils.ordinalIndexOf उपयोग कर सकते हैं, अन्यथा, यह कार्यान्वयन है:

 public static int ordinalIndexOf(String str, String substr, int n) { int pos = str.indexOf(substr); while (--n > 0 && pos != -1) pos = str.indexOf(substr, pos + 1); return pos; } 

इस पोस्ट को एक लेख के रूप में फिर से लिखा गया है ।

मेरा मानना ​​है कि स्ट्रिंग की एनटी घटना को खोजने के लिए सबसे आसान समाधान अपाचे कॉमन्स से StringUtils.ordinalIndexOf () का उपयोग करना है

उदाहरण:

 StringUtils.ordinalIndexOf("aabaabaa", "b", 2) == 5 

दो साधारण विकल्प होते हैं:

  • बार-बार उपयोग करें
  • indexOf() बार-बार उपयोग करें

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

 public static int nthIndexOf(String text, char needle, int n) { for (int i = 0; i < text.length(); i++) { if (text.charAt(i) == needle) { n--; if (n == 0) { return i; } } } return -1; } 

यह लगातार बार-बार indexOf का उपयोग करने के साथ ही प्रदर्शन नहीं कर सकता है, लेकिन सही होने के लिए यह संभवतः सरल है

आप इस तरह से कुछ कोशिश कर सकते हैं:

 import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String[] args) { System.out.println(from3rd("/folder1/folder2/folder3/")); } private static Pattern p = Pattern.compile("(/[^/]*){2}/([^/]*)"); public static String from3rd(String in) { Matcher m = p.matcher(in); if (m.matches()) return m.group(2); else return null; } } 

ध्यान दें कि मैंने regex में कुछ मान्यताओं को किया है:

  • इनपुट पथ पूर्ण है (यानी "/" से शुरू होता है);
  • आपको परिणाम में 3 "/" की आवश्यकता नहीं है

जैसा कि एक टिप्पणी में अनुरोध किया गया है, मैं regex की व्याख्या करने का प्रयास करूंगा: (/[^/]*){2}/([^/]*)

नियमित अभिव्यक्ति दृश्य

  • /[^/]* एक / उसके बाद [^/]* (किसी भी संख्या में वर्ण जो / नहीं हैं)
  • (/[^/]*) एक एकल इकाई में पिछले अभिव्यक्ति समूह। यह अभिव्यक्ति का 1 समूह है,
  • (/[^/]*){2} अर्थ है कि समूह को पूरी तरह से {2} समय से मेल खाना चाहिए,
  • [^/]* फिर से कोई भी संख्या है जो / नहीं हैं,
  • ([^/]*) एक एकल इकाई में प्रीविओस अभिव्यक्ति समूह। यह अभिव्यक्ति के 2 एन डी ग्रुप है

इस तरह आपके पास केवल दूसरे समूह से मेल खाने वाले उप-ऑब्जेक्ट प्राप्त करने के लिए: return m.group(2);

डीबगगेक्स द्वारा दी गई छवि सौजन्य

मैंने एआईओएब के जवाब में कुछ बदलाव किए हैं और एक एनटीएच पिछले इंडेक्स संस्करण प्राप्त किया है, और कुछ एनपीई समस्याएं ठीक करें। नीचे दिए गए कोड देखें:

 public int nthLastIndexOf(String str, char c, int n) { if (str == null || n < 1) return -1; int pos = str.length(); while (n-- > 0 && pos != -1) pos = str.lastIndexOf(c, pos - 1); return pos; } 
  ([.^/]*/){2}[^/]*(/) 

इसके बाद दो बार, फिर दोबारा मैच करें। तीसरा वह है जो आप चाहते हैं

Matcher राज्य का उपयोग यह बता सकते हैं कि अंतिम / कहां है

आजकल अपाचे कॉमन्स लैंग की स्ट्रिंग यूटिलस का समर्थन है,

यह आदिम है:

 int org.apache.commons.lang.StringUtils.ordinalIndexOf(CharSequence str, CharSequence searchStr, int ordinal) 

आपकी समस्या के लिए आप निम्न कोड कर सकते हैं: StringUtils.ordinalIndexOf(uri, "/", 3)

आप पिछलेऑर्डिंड इंडेक्स विधि के साथ एक स्ट्रिंग में एक चरित्र की अंतिम संख्या को भी पा सकते हैं।

 public static int nth(String source, String pattern, int n) { int i = 0, pos = 0, tpos = 0; while (i < n) { pos = source.indexOf(pattern); if (pos > -1) { source = source.substring(pos+1); tpos += pos+1; i++; } else { return -1; } } return tpos - 1; } 

यह जवाब @ ईएओओफ़ के उत्तर में सुधार करता है उस उत्तर में दो बग तय किए गए थे।
1. n = 0 वापस -1 करना चाहिए
2. एनटी अवसर -1 लौटा, लेकिन यह एन -1 वीं घटना पर काम किया।

इसे इस्तेमाल करे !

  public int nthOccurrence(String str, char c, int n) { if(n <= 0){ return -1; } int pos = str.indexOf(c, 0); while (n-- > 1 && pos != -1) pos = str.indexOf(c, pos+1); return pos; } 

एक अन्य दृष्टिकोण:

 public static void main(String[] args) { String str = "/folder1/folder2/folder3/"; int index = nthOccurrence(str, '/', 3); System.out.println(index); } public static int nthOccurrence(String s, char c, int occurrence) { return nthOccurrence(s, 0, c, 0, occurrence); } public static int nthOccurrence(String s, int from, char c, int curr, int expected) { final int index = s.indexOf(c, from); if(index == -1) return -1; return (curr + 1 == expected) ? index : nthOccurrence(s, index + 1, c, curr + 1, expected); } 
 public class Sam_Stringnth { public static void main(String[] args) { String str="abcabcabc"; int n = nthsearch(str, 'c', 3); if(n<=0) System.out.println("Character not found"); else System.out.println("Position is:"+n); } public static int nthsearch(String str, char ch, int n){ int pos=0; if(n!=0){ for(int i=1; i<=n;i++){ pos = str.indexOf(ch, pos)+1; } return pos; } else{ return 0; } } } 
 /* program to find nth occurence of a character */ import java.util.Scanner; public class CharOccur1 { public static void main(String arg[]) { Scanner scr=new Scanner(System.in); int position=-1,count=0; System.out.println("enter the string"); String str=scr.nextLine(); System.out.println("enter the nth occurence of the character"); int n=Integer.parseInt(scr.next()); int leng=str.length(); char c[]=new char[leng]; System.out.println("Enter the character to find"); char key=scr.next().charAt(0); c=str.toCharArray(); for(int i=0;i<c.length;i++) { if(c[i]==key) { count++; position=i; if(count==n) { System.out.println("Character found"); System.out.println("the position at which the " + count + " ocurrence occurs is " + position); return; } } } if(n>count) { System.out.println("Character occurs "+ count + " times"); return; } } } 

मेरा समाधान:

 /** * Like String.indexOf, but find the n:th occurance of c * @param s string to search * @param c character to search for * @param nn:th character to seach for, starting with 1 * @return the position (0-based) of the found char, or -1 if failed */ public static int nthIndexOf(String s, char c, int n) { int i = -1; while (n-- > 0) { i = s.indexOf(c, i + 1); if (i == -1) break; } return i; } 

कोड उर्फ ​​क्षेत्र की चौड़ाई को स्थानांतरित करने के लिए एनथ आवृत्ति पदों देता है। उदाहरण। यदि स्ट्रिंग "कम मैलॉव में ढेर ओवरफ्लो" टोकन "कम" के दूसरे दौर की खोज करने के लिए स्ट्रिंग है, तो आप मेरे साथ सहमत होंगे कि यह 2 गुणा "18 और 21" सबट्रिटिंग पर है indexOfOccurance ("कम मेमोव में ढेर अतिप्रवाह", कम, 2) स्ट्रिंग में 18 और 21 देता है।

 class Example{ public Example(){ } public String indexOfOccurance(String string, String token, int nthOccurance) { int lengthOfToken = token.length(); int nthCount = 0; for (int shift = 0,count = 0; count < string.length() - token.length() + 2; count++, shift++, lengthOfToken++) if (string.substring(shift, lengthOfToken).equalsIgnoreCase(token)) { // keeps count of nthOccurance nthCount++; if (nthCount == nthOccurance){ //checks if nthCount == nthOccurance. If true, then breaks return String.valueOf(shift)+ " " +String.valueOf(lengthOfToken); } } return "-1"; } public static void main(String args[]){ Example example = new Example(); String string = "the man, the woman and the child"; int nthPositionOfThe = 3; System.out.println("3rd Occurance of the is at " + example.indexOfOccurance(string, "the", nthPositionOfThe)); } } 

// शुद्ध सी ++

 int pos = 0; for ( int i = 0; i < N; ++i ) // N = nth position { pos = STRING.find( delim, pos + size_of_delim ); }