URI의 마지막 경로 세그먼트를 얻는 방법
나는 입력에 URI
. 마지막 경로 세그먼트를 얻는 방법은 무엇입니까? 제 경우에는 신분증인가요?
이것은 내 입력 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);
In Java 7+ a few of the previous answers can be combined to allow retrieval of any path segment from a URI, rather than just the last segment. We can convert the URI to a java.nio.file.Path
object, to take advantage of its getName(int)
method.
Unfortunately, the static factory Paths.get(uri)
is not built to handle the http scheme, so we first need to separate the scheme from the URI's path.
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();
To get the last segment in one line of code, simply nest the lines above.
Paths.get(URI.create("http://base_path/some_segment/id").getPath()).getFileName().toString()
To get the second-to-last segment while avoiding index numbers and the potential for off-by-one errors, use the getParent()
method.
String secondToLast = path.getParent().getFileName().toString();
Note the getParent()
method can be called repeatedly to retrieve segments in reverse order. In this example, the path only contains two segments, otherwise calling getParent().getParent()
would retrieve the third-to-last segment.
In Android
Android has a built in class for managing URIs.
Uri uri = Uri.parse("http://base_path/some_segment/id");
String lastPathSegment = uri.getLastPathSegment()
You can use getPathSegments()
function. (Android Documentation)
Consider your example URI:
String uri = "http://base_path/some_segment/id"
You can get the last segment using:
List<String> pathSegments = uri.getPathSegments();
String lastSegment = pathSegments.get(pathSegments.size - 1);
lastSegment
will be id
.
If you have commons-io
included in your project, you can do it without creating unecessary objects with org.apache.commons.io.FilenameUtils
String uri = "http://base_path/some_segment/id";
String fileName = FilenameUtils.getName(uri);
System.out.println(fileName);
Will give you the last part of the path, which is the id
I'm using the following in a utility class:
public static String lastNUriPathPartsOf(final String uri, final int n, final String... ellipsis)
throws URISyntaxException {
return lastNUriPathPartsOf(new URI(uri), n, ellipsis);
}
public static String lastNUriPathPartsOf(final URI uri, final int n, final String... ellipsis) {
return uri.toString().contains("/")
? (ellipsis.length == 0 ? "..." : ellipsis[0])
+ uri.toString().substring(StringUtils.lastOrdinalIndexOf(uri.toString(), "/", n))
: uri.toString();
}
Get URL from URI and use getFile() if you are not ready to use substring way of extracting file.
참고URL : https://stackoverflow.com/questions/4050087/how-to-obtain-the-last-path-segment-of-an-uri
'developer tip' 카테고리의 다른 글
포함 된 HTML과 함께 link_to 사용 (0) | 2020.08.24 |
---|---|
내 데이트에 회의록을 추가하는 방법 (0) | 2020.08.24 |
Android에서 레이아웃의 방향 변경을 감지하는 방법은 무엇입니까? (0) | 2020.08.24 |
PHP에서 두 날짜 사이의 시간 계산 (0) | 2020.08.24 |
MySQL IF NOT NULL, 다음 표시 1, 그렇지 않으면 표시 0 (0) | 2020.08.24 |