Pertanyaan Indeks semua kemunculan karakter dalam string


Kode berikut akan mencetak 2

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

Saya ingin tahu bagaimana mendapatkan semua indeks "n" ("tebakan") dalam string "bannanas"

Hasil yang diharapkan adalah: [2,3,5]


76
2018-02-17 20:46


asal


Jawaban:


Ini harus mencetak daftar posisi tanpa -1 pada akhirnya itu Solusi Peter Lawrey  punya punya.

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

Ini juga bisa dilakukan sebagai for lingkaran:

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

[Catatan: jika guess bisa lebih panjang dari satu karakter, maka mungkin, dengan menganalisis guess string, untuk melewati word lebih cepat dari loop di atas. Patokan untuk pendekatan semacam itu adalah Algoritma Boyer-Moore. Namun, kondisi yang menguntungkan menggunakan pendekatan semacam itu sepertinya tidak ada.]


119
2018-02-17 21:00



Coba yang berikut ini (Yang tidak mencetak -1 di bagian akhir sekarang!)

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

17
2018-02-17 20:48



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);
    }
}

Hasilnya akan digunakan seperti ini:

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

Atau sebagai larik:

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



Dengan Java9, seseorang dapat menggunakan iterate(int seed, IntPredicate hasNext,IntUnaryOperator next) sebagai berikut:-

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