使用統一資源識別符號 ( URI ) 是一種常見操作,主要用於Web 開發和檔案管理。
此外,最常見的需求之一是獲取 URL 中的最後一個路徑段(最後一個段是最後一個“/”字元之後的最後一個段)。
在本教程中,我們將研究獲取 URL 最後一段的不同方法。
1、使用URI類
java.net.URI類支援使用物件導向的方法來解析和操作 URI 。為了方便起見,我們舉個例子:
@Test public void givenURL_whenUsingURIClass_thenGetLastPathSegment() throws URISyntaxException { URI uri = new URI(<font>"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 中提取了預期資源。
2. 使用路徑類
在Java 7中,java.nio.file.Path類為檔案和路徑提供了與平臺無關的表示。提供一種有效的方法來提取 URI 的最後一段。這是一個例子:
@Test public void givenURL_whenUsingPathClass_thenGetLastPathSegment() { String exampleURI = <font>"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()方法和索引計算來確定的。然後將最後一個路徑段轉換為字串以進行比較。3.使用FilenameUtils類
Apache Commons IO庫有一個FilenameUtils類,可用作常見檔案和路徑任務的實用程式類。讓我們舉個例子:
@Test public void givenURL_whenUsingFilenameUtilsClass_thenGetLastPathSegment() throws URISyntaxException { String exampleURI = <font>"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()方法提取路徑後,我們利用FilenameUtils類使用getName()方法獲取最後一個路徑段,該方法將路徑作為引數。4. 使用正規表示式
在從 URL 中提取最後一個路徑段時,正規表示式為靈活且精確的模式定義提供了優雅的解決方案。這是一個例子:
@Test public void givenURL_whenUsingRegularExpression_thenGetLastPathSegment() throws URISyntaxException { URI uri = new URI(<font>"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()方法編譯正規表示式模式並將其應用到路徑字串。此外,條件檢查進一步驗證使用find()方法的正規表示式模式應用程式是否成功。成功匹配後,使用group(1)方法從Matcher物件中提取最後一個路徑段。