Java: Abrufen einer Teilzeichenfolge aus einer Zeichenfolge, die nach einem bestimmten Zeichen beginnt

195

Ich habe eine Zeichenfolge:

/abc/def/ghfj.doc

Ich möchte daraus extrahieren ghfj.doc, dh den Teilstring nach dem letzten /oder zuerst /von rechts.

Könnte jemand bitte etwas Hilfe leisten?

Sonnig
quelle
38
Schauen Sie, ich verstehe den Wert der Suche nach der Antwort selbst, bevor Sie Fragen stellen, aber die Tatsache ist, dass diese Frage meine Suche viel einfacher gemacht hat. Genau das, was ich nach dem ersten Treffer wollte. Schneller als Javadocs zu konsultieren. Es ist gut, dass diese Frage hier ist. Warum die Abstimmungen?
Eric
3
Dies unterscheidet sich zwar etwas von Ihrer ursprünglichen Frage: In Ihrem Beispiel ist org.apache.commons.io.FilenameUtils.getBaseName viel zuverlässiger als das Ausführen eigener Zeichenfolgenoperationen.
Bis Schäfer
4
@Eric Ich stimme Ihrem Kommentar voll und ganz zu, da dies das erste Google-Ergebnis für meine Frage war und die akzeptierte Antwort genau das ist, was ich verwenden musste.
Thonnor

Antworten:

310
    String example = "/abc/def/ghfj.doc";
    System.out.println(example.substring(example.lastIndexOf("/") + 1));
Sébastien Le Callonnec
quelle
41

Eine sehr einfache Implementierung mit String.split():

String path = "/abc/def/ghfj.doc";
// Split path into segments
String segments[] = path.split("/");
// Grab the last segment
String document = segments[segments.length - 1];
Veger
quelle
1
Dieser Code löst einen Array Index Out of Bounds-Fehler aus, wenn das Trennzeichen nicht gefunden wird.
Patrick Parker
36

was hast du versucht es ist sehr einfach:

String s = "/abc/def/ghfj.doc";
s.substring(s.lastIndexOf("/") + 1)
vishal_aim
quelle
23

Eine andere Möglichkeit besteht darin, dies zu verwenden .

String path = "/abc/def/ghfj.doc"
String fileName = StringUtils.substringAfterLast(path, "/");

Wenn Sie dieser Methode null übergeben, wird null zurückgegeben. Wenn keine Übereinstimmung mit dem Trennzeichen besteht, wird eine leere Zeichenfolge zurückgegeben.

Alex Green
quelle
1
Endlich etwas wirklich Handliches, wusste nichts über diese Methode. Ich hasse es, mit Teilzeichenfolge + Index von + 1 - 2 + 3 zu kämpfen. Das ist viel sauberer :)
BAERUS
Wenn Sie diese Methode unter Android verwenden möchten, müssen Sie die StringUtilsBibliothek importieren . Diese Antwort zeigt, wie heiß es ist: stackoverflow.com/a/33935645/2966583
stramin
9

Sie können Apache Commons verwenden:

Verwenden Sie diese Methode für Teilzeichenfolgen nach dem letzten Auftreten .

Und für Teilzeichenfolgen nach dem ersten Auftreten ist hier eine äquivalente Methode .

Michal Przysucha
quelle
4

Dies kann auch den Dateinamen erhalten

import java.nio.file.Paths;
import java.nio.file.Path;
Path path = Paths.get("/abc/def/ghfj.doc");
System.out.println(path.getFileName().toString());

Wird gedruckt ghfj.doc

pushya
quelle
1

In Kotlin können Sie substringAfterLastein Trennzeichen angeben.

val string = "/abc/def/ghfj.doc"
val result = url.substringAfterLast("/")
println(result)
// It will show ghfj.doc

Aus dem Dokument :

Gibt einen Teilstring nach dem letzten Auftreten des Trennzeichens zurück. Wenn die Zeichenfolge das Trennzeichen nicht enthält, wird "missingDelimiterValue" zurückgegeben, das standardmäßig die ursprüngliche Zeichenfolge ist.

Filipe Brito
quelle
0

Ich denke, das wäre besser, wenn wir die Split-Funktion direkt verwenden

String toSplit = "/abc/def/ghfj.doc";

String result[] = toSplit.split("/");

String returnValue = result[result.length - 1]; //equals "ghfj.doc"
user6317575
quelle
Dieser Code gibt einen Fehler aus, wenn das Trennzeichen nicht gefunden wird.
Patrick Parker
@PatrickParker Warum haben Sie überall kommentiert, dass es einen Fehler auslöst, wenn das Trennzeichen nicht gefunden wird? Wenn Sie es aus Wissensgründen tun, dann ist es okay, aber ich denke, es ist vielleicht ein bisschen zu viel ...
Gaurav Mall
@GauravMall Ich helfe Menschen, ihre Antworten zu verbessern, besseren Code zu schreiben und denjenigen, die sie besuchen, dabei zu helfen, Fallstricke zu vermeiden und das Verständnis für den Code zu verbessern, bevor sie ihn irgendwo einfügen. Ich werde meinen Kommentar gerne entfernen, sobald die Antwort verbessert ist. Außerdem ist es kaum "überall", es an zwei Stellen zu schreiben. Schließlich ist der Kommentarbereich nicht für die Metadiskussion vorgesehen.
Patrick Parker