सवाल एक स्ट्रिंग में चरित्र की सभी घटनाओं के सूचकांक


निम्नलिखित कोड 2 प्रिंट करेगा

String word = "bannanas";
String guess = "n";
int index;
System.out.println( 
    index = word.indexOf(guess)
);

मैं जानना चाहता हूं कि "bannanas" स्ट्रिंग में "n" ("अनुमान") की सभी अनुक्रमणिका कैसे प्राप्त करें

अपेक्षित परिणाम होगा: [2,3,5]


76
2018-02-17 20:46


मूल




जवाब:


यह बिना पदों की सूची मुद्रित करना चाहिए -1 अंत में पीटर लॉरी का समाधान  है था।

int index = word.indexOf(guess);
while (index >= 0) {
    System.out.println(index);
    index = word.indexOf(guess, index + 1);
}

यह एक के रूप में भी किया जा सकता है for पाश:

for (int index = word.indexOf(guess);
     index >= 0;
     index = word.indexOf(guess, index + 1))
{
    System.out.println(index);
}

[नोट: अगर guess एक वर्ण से अधिक लंबा हो सकता है, तो इसका विश्लेषण करके यह संभव है guess स्ट्रिंग, लूप के माध्यम से word उपरोक्त loops से तेज है। इस तरह के दृष्टिकोण के लिए बेंचमार्क है बॉयर-मूर एल्गोरिदम। हालांकि, ऐसी परिस्थितियों का उपयोग करने के पक्ष में आने वाली स्थितियां मौजूद नहीं लगती हैं।]


119
2018-02-17 21:00





निम्नलिखित का प्रयास करें (जो अंत में -1 प्रिंट नहीं करता है!)

int index = word.indexOf(guess);
while(index >= 0) {
   System.out.println(index);
   index = word.indexOf(guess, index+1);
}

17
2018-02-17 20:48



इंडेक्स का सबसे अच्छा उपयोग! - asgs
आप हमेशा अंत में -1 प्रिंट करते हैं - smas
@ पीटर आपके उत्तर के लिए बहुत बहुत धन्यवाद, यह सही लगता है, लेकिन यह है वास्तव में जावा के साथ मेरा पहला दिन इसलिए मैं अंतिम परिणाम से थोड़ा उलझन में हूं, ऐसा लगता है कि अंत में आउटपुट -1 लगता है कि मुझे समझ में नहीं आता क्यों! धन्यवाद!! - Trufa
@Trufa: यह हमेशा अंत में -1 प्रिंट करता है क्योंकि indexOf जब चरित्र नहीं मिलता है तो रिटर्न -1। - ColinD
@Trufa - कारण यह प्रिंट करता है -1 अंत में यह है कि do लूप शरीर को निष्पादित करता है और फिर उसको पता चलता है index == -1 समाप्ति में while। - Ted Hopp


String string = "bannanas";
ArrayList<Integer> list = new ArrayList<Integer>();
char character = 'n';
for(int i = 0; i < string.length(); i++){
    if(string.charAt(i) == character){
       list.add(i);
    }
}

परिणाम इस तरह इस्तेमाल किया जाएगा:

    for(Integer i : list){
        System.out.println(i);
    }

या एक सरणी के रूप में:

list.toArray();

5
2018-02-17 20:47





int index = -1;
while((index = text.indexOf("on", index + 1)) >= 0) {
   LOG.d("index=" + index);
}

2
2018-03-28 19:23





String word = "bannanas";

String guess = "n";

String temp = word;

while(temp.indexOf(guess) != -1) {
     int index = temp.indexOf(guess);
     System.out.println(index);
     temp = temp.substring(index + 1);
}

1
2018-02-17 20:51



सामान्य विचार सही है, लेकिन word.substring(word) संकलन नहीं करेंगे। : पी - Peter Lawrey
@ पीटर, सुधार के लिए धन्यवाद। - asgs
अभी भी एक समस्या है: यह लगातार 2 प्रिंट करता है। - POSIX_ME_HARDER
हे भगवान, मुझे यहां जो भी पोस्ट है, उसे जवाक करने की ज़रूरत है। - asgs


जावा 9 के साथ, कोई भी इसका उपयोग कर सकता है iterate(int seed, IntPredicate hasNext,IntUnaryOperator next) निम्नलिखित नुसार:-

List<Integer> indexes = IntStream
          .iterate(word.indexOf(c), index -> index >= 0, index -> word.indexOf(c, index + 1))
          .boxed()
          .collect(Collectors.toList());
System.out.printlnt(indexes);

1
2018-02-03 03:06





    String input = "GATATATGCG";
    String substring = "G";
    String temp = input;
    String indexOF ="";
    int tempIntex=1;

    while(temp.indexOf(substring) != -1)
    {
        int index = temp.indexOf(substring);
        indexOF +=(index+tempIntex)+" ";
        tempIntex+=(index+1);
        temp = temp.substring(index + 1);
    }
    Log.e("indexOf ","" + indexOF);

0
2018-03-07 15:03



... क्या वह कोड डीएनए sequnces के लिए देख रहे हैं? ¿? ¿एक्सडी - kaytes