Finden des zweiten Vorkommens eines Teilstrings in einem String in Java
Lesezeit: 3 Minuten
AmanArora
Uns wird eine Zeichenfolge gegeben, sagen wir, "itiswhatitis" und eine Teilzeichenfolge, sagen wir, "is". Ich muss den Index von finden 'i' wenn die Saite "is" kommt ein zweites Mal in der ursprünglichen Zeichenfolge vor.
String.indexOf("is") gibt in diesem Fall 2 zurück. Ich möchte, dass die Ausgabe in diesem Fall 10 ist.
Rohit Jain
Verwenden Sie die überladene Version von indexOf()die den Startindex (fromIndex) als 2. Parameter übernimmt:
int first = string.indexOf("is");
int second = string.indexOf("is", first + 1);
Diese Überladung beginnt mit der Suche nach der Teilzeichenfolge aus dem angegebenen Index.
Was ist, wenn das Vorkommen mehr als zweimal ist?
– Pravat Panda
26. September 2013 um 18:33 Uhr
Dann passiert nichts Besonderes, es dauert immer noch das zweite Auftreten.
– Jeroen Vannevel
26. September 2013 um 18:34 Uhr
was ist mit dem Index des dritten Vorkommens!
– Pravat Panda
26. September 2013 um 18:34 Uhr
Was ist damit? Die Frage war, das zweite Vorkommen zu finden.
– Jeroen Vannevel
26. September 2013 um 18:35 Uhr
@PravatPanda: Ich denke, Sie möchten wissen, wie Sie das dritte Vorkommen erhalten? Dann könnten Sie den Code in Jeroens Antwort einfach fortsetzen und einen dritten hinzufügen string.indexOf("is", second + 1); obwohl es wahrscheinlich besser wäre, eine Methode zu erstellen, die den N-ten indexOf zurückgibt
– Juha Untinen
27. August 2014 um 8:44 Uhr
Sie können eine Funktion schreiben, um ein Array von Vorkommenspositionen zurückzugeben. Java hat die Funktion String.regionMatches, die sehr praktisch ist
public static ArrayList<Integer> occurrencesPos(String str, String substr) {
final boolean ignoreCase = true;
int substrLength = substr.length();
int strLength = str.length();
ArrayList<Integer> occurrenceArr = new ArrayList<Integer>();
for(int i = 0; i < strLength - substrLength + 1; i++) {
if(str.regionMatches(ignoreCase, i, substr, 0, substrLength)) {
occurrenceArr.add(i);
}
}
return occurrenceArr;
}
Ich hoffe, ich komme nicht zu spät zur Party. Hier ist meine Antwort. Ich verwende Pattern/Matcher gerne, weil es Regex verwendet, was effizienter sein sollte. Ich denke jedoch, dass diese Antwort verbessert werden könnte:
Matcher matcher = Pattern.compile("is").matcher("I think there is a smarter solution, isn't there?");
int numOfOcurrences = 2;
for(int i = 0; i < numOfOcurrences; i++) matcher.find();
System.out.println("Index: " + matcher.start());
Schöne Lösung, fand ich. Danke Hasnaa!
– Hassan Jamil
26. Mai 2021 um 14:01 Uhr
Pravat Panda
Ich denke, eine Schleife kann verwendet werden.
1 - check if the last index of substring is not the end of the main string.
2 - take a new substring from the last index of the substring to the last index of the main string and check if it contains the search string
3 - repeat the steps in a loop
Schöne Lösung, fand ich. Danke Hasnaa!
– Hassan Jamil
26. Mai 2021 um 14:01 Uhr
Said Arianmanesh
Wenn Sie den Index für mehr als 2 Vorkommen finden möchten: