在 Objective-C 中,我-[NSURL URLByDeletingLastPathComponent]
用来获取父 URL。Java 中的 this 等价物是什么?
问问题
17378 次
5 回答
31
我能想到的最短的代码片段是这样的:
URI uri = new URI("http://www.stackoverflow.com/path/to/something");
URI parent = uri.getPath().endsWith("/") ? uri.resolve("..") : uri.resolve(".");
于 2012-04-15T03:35:28.530 回答
4
我不知道库函数可以一步完成。但是,我相信以下(诚然繁琐)代码可以完成您所追求的(并且您可以将其包装在您自己的实用程序函数中):
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
public class URLTest
{
public static void main( String[] args ) throws MalformedURLException
{
// make a test url
URL url = new URL( "http://stackoverflow.com/questions/10159186/how-to-get-parent-url-in-java" );
// represent the path portion of the URL as a file
File file = new File( url.getPath( ) );
// get the parent of the file
String parentPath = file.getParent( );
// construct a new url with the parent path
URL parentUrl = new URL( url.getProtocol( ), url.getHost( ), url.getPort( ), parentPath );
System.out.println( "Child: " + url );
System.out.println( "Parent: " + parentUrl );
}
}
于 2012-04-15T03:33:37.520 回答
3
这是非常简单的解决方案,这是我用例中的最佳方法:
private String getParent(String resourcePath) {
int index = resourcePath.lastIndexOf('/');
if (index > 0) {
return resourcePath.substring(0, index);
}
return "/";
}
我创建了简单的函数,我受到File::getParent
. 在我的代码中,Windows 上的反斜杠没有问题。我假设这resourcePath
是 URL 的资源部分,没有协议、域和端口号。(例如/articles/sport/atricle_nr_1234
)
于 2017-03-20T10:29:54.133 回答
1
Guava 库提供的简单解决方案。
代码:
URL url = new URL("https://www.ibm.watson.co.uk");
String host = url.getHost();
InternetDomainName parent = InternetDomainName.from(host).parent(); // returns ibm.watson.co.uk
System.out.println("Immediate ancestor: "+parent);
ImmutableList<String> parts = InternetDomainName.from(host).parts();
System.out.println("Individual components: "+parts);
InternetDomainName name = InternetDomainName.from(host).topPrivateDomain(); // watson.co.uk
System.out.println("Top private domain - " + name);
输出:
Immediate ancestor: ibm.watson.co.uk
Individual components: [www, ibm, watson, co, uk]
Top private domain - watson.co.uk
供参考: https ://guava.dev/releases/snapshot/api/docs/com/google/common/net/InternetDomainName.html
需要依赖:
https://mvnrepository.com/artifact/com.google.guava/guava
我使用的是 19.0 版
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
而且,这个类InternetDomainName提供了更多相关的功能。
于 2020-05-29T06:11:11.620 回答
0
使用 java.nio.file.Paths 这可以在一行中完成。
例如:
String parent = Paths.get("https://stackoverflow.com/questions/10159186/how-to-get-parent-url-in-java/").getParent().toString();
System.out.println(parent);
将打印:
https:/stackoverflow.com/questions/10159186
于 2022-02-01T23:01:30.300 回答