3 Stimmen

Finden Sie die Position eines Teilstrings in einem String (nicht indexOf)

Ex

String str = "abc def ghi";

Gibt es eine Methode wie str.find("abc"), die mir 1 zurückgibt und str.find("def") mir 2 zurückgibt?

Programmiersprache Java..

7voto

Bernhard Barker Punkte 52773

Wie wäre es mit so etwas?

int getIndex(String str, String substring)
{
  return Arrays.asList(str.split("\\s+")).indexOf(substring)+1;
}

Haftungsausschluss: Dies ist überhaupt nicht effizient. Es teilt den gesamten String jedes Mal, wenn die Funktion aufgerufen wird, neu auf.

Testcode:

String str = "abc def ghi";
System.out.println(getIndex(str, "abc"));
System.out.println(getIndex(str, "def"));

Druckt:

1
2

Erklärung:

str.split("\\s+") teilt den String durch Leerzeichen auf und setzt jeden Teil an eine Position in einem Array.

Arrays.asList gibt ein ArrayList für das Array zurück.

indexOf(substring) findet die Position des Strings in der ArrayList.

+1 da Java 0-Indexierung verwendet und Sie 1-Indexierung möchten.

1voto

MansoorShaikh Punkte 905

Da Sie nicht nach dem Index eines Teilstrings fragen, sondern nach welcher Wortposition der Teilstring gehört, steht keine entsprechende integrierte Methode zur Verfügung. Sie können jedoch den Eingabestring nach Leerzeichen aufteilen und jedes Element in der von der split-Methode zurückgegebenen Liste durchlaufen und überprüfen, an welcher Listenposition sich Ihr Teilstring befindet.

Lassen Sie mich wissen, wenn Sie Code dafür benötigen.

1voto

Callum Punkte 869

Ich glaube nicht, dass es eine native Funktion dafür gibt. Aber Sie könnten Ihre eigene schreiben.

Es scheint, als wollten Sie den String anhand des Leerzeichens aufteilen.

String[] parts = string.split(" ");

Laufen Sie durch das erstellte Array. Und geben Sie den Index + 1 zurück (da Java nullbasierte Indizes hat).

for(int i = 0; i < parts.length; i++)
{
  if(parts[i].equals(parameter))
  {
     return i + 1;
  }
}

1voto

Zachariah Rabatah Punkte 312

Wenn Sie mehrere Positionen des gleichen Strings finden möchten, versuchen Sie diesen Code.

//Gibt ein Array von Ganzzahlen mit jeder Zeichenposition zurück
private int[] getStringPositions(String string, String subString){
        String[] splitString = string.split(subString); //String aufsplitten

        int totalLen = 0; //Gesamtlänge des Strings, im Schleifendurchlauf hinzugefügt

        int[] indexValues = new int[splitString.length - 1]; //Vorkommen von subString im String

        //Schleife durch das splitString-Array, um jede Position zu erhalten
        for (int i = 0; i < splitString.length - 1; i++){

            if (i == 0) {
                //Nur die Länge des ersten splitString hinzufügen, weil subString hier abgeschnitten wird.
                totalLen = totalLen + splitString[i].length();
            }
            else{
                // totalLen & splitString Länge und subString Länge hinzufügen
                totalLen = totalLen + splitString[i].length() + subString.length();
            }

            indexValues[i] = totalLen; //Setze indexValue für aktuelles i
        }

        return indexValues;
    }

Also zum Beispiel:

String string = "s an s an s an s"; //Länge = 15
String subString = "an";

Die Antwort würde indexValues = (2, 7, 12) zurückgeben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X