web-dev-qa-db-ja.com

Java:特定の文字の後から始まる文字列から部分文字列を取得する

私は文字列を持っています:

/abc/def/ghfj.doc

これからghfj.doc、すなわち最後の/の後の部分文字列、または右から最初の/を抽出します。

誰かが何か助けをお願いします。

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

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

何を試しましたか?とても簡単です。

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

もう一つの方法は this を使うことです。

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

このメソッドにnullを渡すと、nullが返されます。区切り文字との一致がない場合は、空の文字列を返します。

18
Alex Green

Apacheのcommonsを使うことができます:

最後の出現後の部分文字列には this メソッドを使用します。

そして最初に出現した後の部分文字列に対して、等価な方法は here です。

8

これもファイル名を取得することができます

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

ghfj.docを印刷します

3
pushya

Kotlinでは、区切り文字を指定してsubstringAfterLastを使用できます。

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

doc から:

最後に出現した区切り文字の後の部分文字列を返します。文字列に区切り文字が含まれていない場合は、missingDelimiterValueを返します。デフォルトは元の文字列です。

Guava とします。

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

最終的にSplitterを設定して

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

また、 guava Splitterに関するこの記事 および guava Iterableに関するこの記事 を見てください。

1
jschnasse

分割関数を直接使うのであればもっと良いと思います

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

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

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