Frage Indizes aller Vorkommen von Zeichen in einer Zeichenfolge


Der folgende Code wird gedruckt 2

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

Ich würde gerne wissen, wie man alle Indizes von "n" ("rate") in die Zeichenfolge "bannanas" bringt

Das erwartete Ergebnis wäre: [2,3,5]


76
2018-02-17 20:46


Ursprung


Antworten:


Dies sollte die Liste der Positionen ohne die drucken -1 Am Ende das Peter Lawreys Lösung  hat hätten.

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

Es kann auch als a gemacht werden for Schleife:

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

[Anmerkung: wenn guess kann länger sein als ein einzelnes Zeichen, dann ist es möglich, durch die Analyse der guess Zeichenfolge, um durchzulaufen word schneller als die obigen Schleifen. Der Maßstab für einen solchen Ansatz ist der Boyer-Moore-Algorithmus. Die Voraussetzungen für einen solchen Ansatz scheinen jedoch nicht gegeben zu sein.]


119
2018-02-17 21:00



Probiere folgendes aus (Was am Ende nicht -1 ausdruckt!)

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

Das Ergebnis würde folgendermaßen aussehen:

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

Oder als ein Array:

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



Mit Java9 kann man das nutzen iterate(int seed, IntPredicate hasNext,IntUnaryOperator next) wie folgt:-

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