입력으로 URI
. 마지막 경로 세그먼트 (내 경우에는 ID)를 어떻게 얻을 수 있습니까?
이것은 내 입력 URL입니다.
String uri = "http://base_path/some_segment/id"
그리고 나는 이것으로 시도한 ID를 얻어야합니다.
String strId = "http://base_path/some_segment/id";
strId = strId.replace(path);
strId = strId.replaceAll("/", "");
Integer id = new Integer(strId);
return id.intValue();
하지만 작동하지 않습니다. 확실히 더 나은 방법이 있어야합니다.
답변
당신이 찾고있는 것입니다 :
URI uri = new URI("http://example.com/foo/bar/42?param=true");
String path = uri.getPath();
String idStr = path.substring(path.lastIndexOf('/') + 1);
int id = Integer.parseInt(idStr);
대안으로
URI uri = new URI("http://example.com/foo/bar/42?param=true");
String[] segments = uri.getPath().split("/");
String idStr = segments[segments.length-1];
int id = Integer.parseInt(idStr);
답변
import android.net.Uri;
Uri uri = Uri.parse("http://example.com/foo/bar/42?param=true");
String token = uri.getLastPathSegment();
답변
이를 수행하는 간단한 방법은 다음과 같습니다.
public static String getLastBitFromUrl(final String url){
// return url.replaceFirst("[^?]*/(.*?)(?:\\?.*)","$1);" <-- incorrect
return url.replaceFirst(".*/([^/?]+).*", "$1");
}
테스트 코드 :
public static void main(final String[] args){
System.out.println(getLastBitFromUrl(
"http://example.com/foo/bar/42?param=true"));
System.out.println(getLastBitFromUrl("http://example.com/foo"));
System.out.println(getLastBitFromUrl("http://example.com/bar/"));
}
산출:
42
푸
바
설명:
.*/ // find anything up to the last / character
([^/?]+) // find (and capture) all following characters up to the next / or ?
// the + makes sure that at least 1 character is matched
.* // find all following characters
$1 // this variable references the saved second group from above
// I.e. the entire string is replaces with just the portion
// captured by the parentheses above
답변
나는 이것이 오래되었다는 것을 알고 있지만 여기의 해결책은 다소 장황 해 보입니다. URL
또는 URI
다음 이 있으면 쉽게 읽을 수있는 한 줄짜리 줄입니다 .
String filename = new File(url.getPath()).getName();
또는 다음이있는 경우 String
:
String filename = new File(new URL(url).getPath()).getName();
답변
Java 8을 사용 중이고 파일 경로의 마지막 세그먼트를 원하는 경우 수행 할 수 있습니다.
Path path = Paths.get("example/path/to/file");
String lastSegment = path.getFileName().toString();
당신이 http://base_path/some_segment/id
할 수있는 것과 같은 URL이 있다면 .
final Path urlPath = Paths.get("http://base_path/some_segment/id");
final Path lastSegment = urlPath.getName(urlPath.getNameCount() - 1);
답변
Android에서
Android에는 URI 관리를위한 기본 제공 클래스가 있습니다.
Uri uri = Uri.parse("http://base_path/some_segment/id");
String lastPathSegment = uri.getLastPathSegment()
답변
Java 7+에서는 이전 답변 중 몇 가지를 결합 하여 마지막 세그먼트가 아닌 URI에서 모든 경로 세그먼트를 검색 할 수 있습니다 . 메서드를 java.nio.file.Path
활용하기 위해 URI를 객체 로 변환 할 수 있습니다 getName(int)
.
불행히도 정적 팩토리 Paths.get(uri)
는 http 체계를 처리하도록 구축되지 않았으므로 먼저 체계를 URI 경로에서 분리해야합니다.
URI uri = URI.create("http://base_path/some_segment/id");
Path path = Paths.get(uri.getPath());
String last = path.getFileName().toString();
String secondToLast = path.getName(path.getNameCount() - 2).toString();
한 줄의 코드에서 마지막 세그먼트를 가져 오려면 위 줄을 중첩하면됩니다.
Paths.get(URI.create("http://base_path/some_segment/id").getPath()).getFileName().toString()
인덱스 번호와 오프 바이 원 오류 가능성을 피하면서 마지막에서 두 번째 세그먼트를 얻으려면 getParent()
방법을 사용하십시오 .
String secondToLast = path.getParent().getFileName().toString();
메모 getParent()
방법은 역순으로 세그먼트를 검색하기 위해 반복적으로 호출 할 수 있습니다. 이 예에서 경로에는 두 개의 세그먼트 만 포함됩니다. 그렇지 않으면 호출 getParent().getParent()
하면 마지막에서 세 번째 세그먼트를 검색합니다.