2011-02-14 6 views
17

में एकाधिक मैचों के लिए जावा इंडेक्सऑफ विधि मुझे इंडेक्सऑफ विधि के बारे में कोई प्रश्न था। मैं एक स्ट्रिंग में "एक्स" के कई मामलों को खोजना चाहता हूं।स्ट्रिंग

मान लीजिए कि मेरी स्ट्रिंग "x x x x x x है", मैं अपने सभी इंडेक्स पदों में x खोजना चाहता हूं। लेकिन आप कई मामलों के लिए यह कैसे करते हैं? क्या यह इंडेक्सऑफ के साथ भी संभव है?

मैंने int temp = str.indexOf ('x') किया था; यह पहला एक्स ढूंढता है। मैंने लूप के लिए एक ऐसा करने की कोशिश की जहां मुझे स्ट्रिंग की लंबाई शुरू हो गई और यह काम नहीं किया क्योंकि मैंने पहले एक्स को ओवर और ओवर ढूंढ लिया था।

for (int y = temp1; y >= 0;y--) 
{ 
    int temp = str.indexOf('x'); 
    System.out.println(temp); 
} 

लेकिन यह काम नहीं करता है। क्या मुझे रेगेक्स का उपयोग करना चाहिए? क्योंकि मुझे वास्तव में रेगेक्स विधि का उपयोग करने का तरीका नहीं पता है।

किसी भी मदद की सराहना की जाएगी, धन्यवाद!

उत्तर

37

indexOf विधि का दूसरा संस्करण है, जो पैरामीटर के रूप में स्टार्ट-इंडेक्स लेता है।

i = str.indexOf('x'); 
while(i >= 0) { 
    System.out.println(i); 
    i = str.indexOf('x', i+1); 
} 
+2

आह, आपका बहुत-बहुत हर किसी को धन्यवाद देता हूं। यह बहुत समझ में आता है क्योंकि आप अंतिम मैच की स्थिति के आधार पर स्ट्रिंग के माध्यम से बस फिर से शुरू होते हैं। – Eric

+0

मेरा दिन बचाया बहुत धन्यवाद – VizardCrawler

10

indexOf विधि का एक और संस्करण है, fromIndex पैरामीटर के रूप में ले रहा है।
तो, आप इसे एक लूप में कॉल कर सकते हैं, हर बार prevPosition + 1 को दूसरे पैरामीटर के रूप में पास करते हैं।

प्रलेखन:
http://download.oracle.com/javase/6/docs/api/java/lang/String.html#indexOf(int, int)

5

आप indexOf साथ शुरू सूचकांक निर्दिष्ट कर सकते हैं। तो, अपने लूप में आप 'x' की आखिरी स्थिति को स्टोर करते हैं, फिर उस इंडेक्स का उपयोग करके फिर से खोजें + 1.

2

अलग दृष्टिकोण यहाँ के लिए, आप धाराओं एपीआई के साथ जावा 8 में यह कर सकते हैं

String text = "Lets search for E ?"; 

final char key = "e".charAt(0); 
int[] indices = IntStream.range(0, text.length()) 
         .filter(i -> text.charAt(i) == key) 
         .toArray(); 
//output 
//1 
//6 

आप अपर-केस पत्र के साथ छोटे अक्षर "ई" "ई" खोजना चाहते हैं तुम सिर्फ साथ फिल्टर के तर्क बदल सकते हैं:

.filter(i -> Character.toLowerCase(text.charAt(i)) == key) 

उत्पादन होगा:

//1 
//6 
//16 

साथ ही यदि आप सरणी में इकट्ठा करने के लिए अगर आप सिर्फ त्वरित परीक्षण प्रयोजनों के लिए आप के साथ यह कर सकते हैं के लिए उसे प्रिंट करना चाहते हैं चाहते हैं न:

IntStream.range(0, text.length()) 
     .filter(i -> text.charAt(i) == key) 
     .forEach(System.out::println); 
0
String name = "alameer kaiser aziz"; 
String found = "a"; 
int num = name.indexOf(found); 
while (num >=0) { 
    System.out.println(num); 
    num = name.indexOf(found,num+1); 
}