在Java中取得URI的最後一個路徑段
一、簡介
使用統一資源識別碼 (URI) 是一種常見操作,主要用於 Web 開發和文件管理。
此外,最常見的需求之一是取得 URL 中的最後一個路徑段(最後一個段是最後一個「/」字元之後的最後一個段)。
在本教程中,我們將研究獲取 URL 最後一段的不同方法。
2. 使用URI
類
java.net.URI
類別支援使用物件導向的方法來解析和操作 URI。為了方便起見,我們舉個例子:
@Test
public void givenURL_whenUsingURIClass_thenGetLastPathSegment() throws URISyntaxException {
URI uri = new URI("https://www.example.com/path/to/resource");
String path = uri.getPath();
String[] segments = path.split("/");
String lastSegment = segments[segments.length - 1];
assertEquals("resource", lastSegment);
}
給定方法使用範例 URL 初始化URI
。隨後,使用getPath()
方法提取 URI 的路徑。然後根據正斜線 (“/”) 分隔符號將路徑分成多個段。然後透過存取段數組的最後一個元素來確定最後一個路徑段。
最後,測試斷言最後一個路徑段與預期值匹配,從而確認該功能正確地從 URL 中提取了預期資源。
3. 使用Path
類
在Java 7中, java.nio.file.Path
類別為檔案和路徑提供了與平台無關的表示。提供一個有效的方法來提取 URI 的最後一段。這是一個例子:
@Test
public void givenURL_whenUsingPathClass_thenGetLastPathSegment() {
String exampleURI = "https://www.example.com/path/to/resource";
try {
URI uri = new URI(exampleURI);
String pathString = uri.getPath();
Path path = Paths.get(pathString);
Path lastSegment = path.getName(path.getNameCount() - 1);
assertEquals("resource", lastSegment.toString());
} catch (Exception e) {
fail("Exception occurred: " + e.getMessage());
}
}
與上一節一樣,我們首先初始化一個 URI 並使用getPath()
方法。隨後,我們從獲得的pathString
建立一個名為 path 的Path
物件。最後一個段落是使用getName()
方法和索引計算來確定的。然後將最後一個路徑段轉換為字串以進行比較。
4.使用FilenameUtils
類
Apache Commons IO 函式庫有一個FilenameUtils
類,可用作常見檔案和路徑任務的實用程式類別。讓我們舉個例子:
@Test
public void givenURL_whenUsingFilenameUtilsClass_thenGetLastPathSegment() throws URISyntaxException {
String exampleURI = "https://www.example.com/path/to/resource";
URI uri = new URI(exampleURI);
String path = uri.getPath();
String lastSegment = FilenameUtils.getName(path);
assertEquals("resource", lastSegment);
}
使用getPath()
方法擷取path
後,我們利用FilenameUtils
類別使用getName()
方法取得最後一個路徑段,該方法將path
作為參數。
5. 使用正規表示式
在從 URL 中提取最後一個路徑段時,正規表示式為靈活且精確的模式定義提供了優雅的解決方案。這是一個例子:
@Test
public void givenURL_whenUsingRegularExpression_thenGetLastPathSegment() throws URISyntaxException {
URI uri = new URI("https://www.example.com/path/to/resource");
String path = uri.getPath();
Pattern pattern = Pattern.compile(".*/(.+)");
Matcher matcher = pattern.matcher(path);
if (!matcher.find()) {
fail("Regex pattern didn't match.");
}
String lastSegment = matcher.group(1);
assertEquals("resource", lastSegment);
}
在這裡,我們定義了一個正規表示式模式「 /(.+)
」來精確捕獲 URL 路徑的最後一段。利用Pattern
和Matcher
類,我們使用compile()
和matcher()
方法編譯正規表示式模式並將其套用到path
字串。
此外,條件檢查進一步驗證使用find()
方法的正規表示式模式應用程式是否成功。成功配對後,使用group(1)
方法從Matcher
物件中擷取最後一個路徑段。
六,結論
總之,本教學探討了多種 Java 方法,包括URI
類別、 Path
類別、 FilenameUtils
和正規表示式,提供了多種方法來有效地從 URL 中提取最後一個路徑段。
與往常一樣,隨附的源代碼可以 在 GitHub 上找到。