Java : 특정 문자 다음에 시작하는 문자열에서 하위 문자열 가져 오기


198

문자열이 있습니다.

/abc/def/ghfj.doc

ghfj.doc이것에서 추출 하고 싶습니다 . 즉, 마지막 이후 /또는 처음 /부터 하위 문자열 입니다.

누군가 도움을 줄 수 있습니까?


40
봐, 나는 질문을하기 전에 스스로 답변을 검색의 가치를 이해하지만, 문제의 사실은이 질문이 내 검색을 훨씬 쉽게 만들었습니다.. 첫 번째 히트 후 정확히 내가 원하는 것. javadocs에 문의하는 것보다 빠릅니다. 이 질문이있는 것이 좋습니다. 왜 다운 보트인가?
— Eric

3
이것은 원래 질문과 약간 다르지만 예에서 org.apache.commons.io.FilenameUtils.getBaseName은 자체 문자열 작업을 수행하는 것보다 훨씬 안정적입니다.
— Till Schäfer

4
@Eric 나는 이것이 내 질문에 대한 첫 번째 Google 결과이고 귀하의 답변이 정확히 내가 사용했던 것이므로 귀하의 의견에 전적으로 동의합니다.
— thonnor

답변:



42

매우 간단한 구현 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
이 코드는 구분자를 찾을 수없는 경우 Array Index Out of Bounds 오류를 발생시킵니다.
— 패트릭 파커

36

무엇을 시도 했습니까? 매우 간단합니다.

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

24

또 다른 방법은 이것을 사용 하는 것 입니다.

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

이 메소드에 널을 전달하면 널을 리턴합니다. 구분 기호와 일치하지 않으면 빈 문자열을 반환합니다.


1
마지막으로 정말 편리한 방법은이 방법에 대해 몰랐습니다. 나는 하위 문자열 + indexof + 1-2 +3로 번거 로워하는 것을 싫어합니다. 이것은 훨씬 더 깨끗합니다 :)
— BAERUS

당신이 안드로이드에이 방법을 사용하려면, 당신은 수입에있는 StringUtils도서관, 뜨거운이 답변 쇼는 그것을 할 수 있습니다 : stackoverflow.com/a/33935645/2966583
— stramin


4

이것은 또한 파일 이름을 얻을 수 있습니다

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



1

Kotlin에서는 substringAfterLast구분자를 지정 하여을 사용할 수 있습니다 .

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

로부터 문서 :

구분자가 마지막으로 나타난 후 부분 문자열을 반환합니다. 문자열에 구분자가 포함되어 있지 않으면 missingDelimiterValue를 반환합니다. 기본값은 원래 문자열입니다.


0

분할 기능을 직접 사용하면 더 좋을 것이라고 생각합니다.

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

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

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

구분 기호를 찾지 못하면이 코드에서 오류가 발생합니다.
— 패트릭 파커

@PatrickParker 왜 구분 기호를 찾을 수 없으면 오류가 발생한다고 모든 곳에서 주석을 달았습니다. 당신이 괜찮은 것보다 지식의 목적을 위해 그것을하고 있다면, 나는 단지 그것이 너무 많은 것 같아요 ...
— Gaurav Mall

@GauravMall 나는 사람들이 답변을 개선하고 더 나은 코드를 작성하도록 도와주고 방문하는 사람들이 함정을 피하고 코드를 어딘가에 붙여 넣기 전에 이해하도록 도와줍니다. 답변이 개선되면 기꺼이 댓글을 삭제하겠습니다. 또한, 두 곳에서 쓰는 것은 거의 "모든 곳"이 아닙니다. 마지막으로 주석 섹션은 메타 토론을위한 것이 아닙니다.
— 패트릭 파커
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.