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?


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:



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];

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)

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.


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 .


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



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.


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"

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.