web-dev-qa-db-fra.com

Java: Obtenir une sous-chaîne à partir d'une chaîne commençant après un caractère particulier

J'ai une ficelle:

/abc/def/ghfj.doc

J'aimerais en extraire ghfj.doc, c'est-à-dire la sous-chaîne après le dernier / ou le premier / à partir de la droite.

Quelqu'un pourrait-il s'il vous plaît fournir de l'aide?

174
Sunny
    String example = "/abc/def/ghfj.doc";
    System.out.println(example.substring(example.lastIndexOf("/") + 1));
278

Une implémentation très simple avec 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];
40
Veger

qu'as-tu essayé? c'est très simple:

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

Une autre façon consiste à utiliser this .

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

Si vous passez null à cette méthode, il retournera null. S'il n'y a pas de correspondance avec le séparateur, il retournera une chaîne vide.

20
Alex Green

Vous pouvez utiliser Apache commons:

Pour la sous-chaîne après la dernière occurrence, utilisez la méthode this .

Et pour la sous-chaîne après la première occurrence, la méthode équivalente est ici .

8
Michal Przysucha

Cela peut aussi obtenir le nom du fichier

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

Imprimera ghfj.doc

3
pushya

Dans Kotlin, vous pouvez utiliser substringAfterLast, en spécifiant un délimiteur.

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

De la doc :

Retourne une sous-chaîne après la dernière occurrence du délimiteur. Si la chaîne ne contient pas le délimiteur, renvoie missingDelimiterValue, qui est la chaîne par défaut.

1
Filipe Brito

Avec Guava , faites ceci:

String id="/abc/def/ghfj.doc";
String valIfSplitIsEmpty="";
return Iterables.getLast(Splitter.on("/").split(id),valIfSplitIsEmpty);

Finalement, configurez la Splitter et utilisez

Splitter.on("/")
.trimResults()
.omitEmptyStrings()
...

Regardez également cet article sur la goyave Splitter et cet article sur la goyave Iterables

1
jschnasse

Je pense que ce serait mieux si nous utilisions directement la fonction split

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

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

String returnValue = result[result.length - 1]; //equals "ghfj.doc"
0
user6317575