1. 简介
使用统一资源标识符(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()方法提取路径后,我们利用FilenameUtils类使用getName()方法获取最后的路径段,该方法以路径作为参数。
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()方法编译并将正则表达式模式应用于路径字符串。
此外,条件检查使用find()方法进一步验证正则表达式模式应用是否成功。匹配成功后,使用group(1)方法从Matcher对象中提取最后一个路径段。
6. 总结
总之,本教程探讨了多种Java方法,包括URI类、Path类、FilenameUtils和正则表达式,提供了多种方法来有效地从URL中提取最后的路径段。
Post Directory
