我有一个网址https://xyz.com/abc/.../xyz/name_part。我想有效地将它分成两个独立的部分:名称空间URI https://xyz.com/abc/.../xyz和名称部分,即URL中的name_part。在Java中执行此操作的最佳方法是什么? 请注意,名称空间URI不是固定的,而且可以是动态的。 干杯
答案 0 :(得分:5)
据我所知,JDK的URL类可以满足您的需求。
URL url = new URL("https://test:password@localhost:7001/context/document?key1=val1&key2=val2");
检查所有网址类getters
。其中一些包括:
url.getProtocol();
url.getUserInfo();
url.getHost();
url.getPort();
url.getPath();
url.getQuery();
答案 1 :(得分:2)
效率在这方面不太可能引起关注。去寻找最容易理解的东西:
String url = "https://xyz.com/abc/.../xyz/name_part";
int separator = url.lastIndexOf('/');
String namespacePart = url.substring(0, separator);
String namePart = url.substring(separator + 1);
或者也许:
String url = "https://xyz.com/abc/.../xyz/name_part";
String[] pathSegments = URI.create(url).getPath().split("/");
String namePart = pathSegments[pathSegments.length - 1];
String namespacePart = url.replaceAll("/" + namePart + "$", "");
取决于你最自然的东西。
答案 2 :(得分:1)
使用网址类,它会在所有相关部分中分割网址:http://docs.oracle.com/javase/7/docs/api/java/net/URL.html
http://docs.oracle.com/javase/7/docs/api/java/net/URL.html#URL(java.lang.String)
答案 3 :(得分:1)
在这种情况下,我只想使用正则表达式
String url = "https://xyz.com/abc/.../xyz/name_part";
String[] a = url.split("/(?!.*/.*)");
System.out.println(Arrays.toString(a));
输出
[https://xyz.com/abc/.../xyz, name_part]