Java中獲取URI最後一個路徑段的4種方法

banq發表於2024-03-17

使用統一資源識別符號 ( 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物件中提取最後一個路徑段。

相關文章