あなたはこのようなものが欲しい:
String path = new URL("http://www.costo.com/test1/test2").getPath();
実際には/test1/test2
が得られます。必要なものを取得するには、最初の/
を削除する必要があります。
path = path.replaceFirst("/", "");
これで、path
にtest1/test2
が作成されます。
URLからパスを抽出するだけのJava URLクラスを使用してパフォーマンスに疑問があり、これはやり過ぎだと思いました。
したがって、3つのメソッドを作成しました。これらのメソッドはすべて、特定のURLからパスを抽出する方法が異なります。
3つのメソッドはすべて、指定されたURLに対して1000000回呼び出されます。
結果は次のとおりです。
#1 (getPathviaURL) took: 860ms
#2 (getPathViaRegex) took: 3763ms
#3 (getPathViaSplit) took: 1365ms
コード-自由に最適化してください:
public static void main(String[] args) {
String Host = "http://stackoverflow.com/questions/5564998/how-to-get-the-path-of-a-url";
long start1 = System.currentTimeMillis();
int i = 0;
while (i < 1000000) {
getPathviaURL(Host);
i++;
}
long end1 = System.currentTimeMillis();
System.out.println("#1 (getPathviaURL) took: " + (end1 - start1) + "ms");
Pattern p = Pattern.compile("(?:([^:\\/?#]+):)?(?:\\/\\/([^\\/?#]*))?([^?#]*)(?:\\?([^#]*))?(?:#(.*))?");
long start2 = System.currentTimeMillis();
int i2 = 0;
while (i2 < 1000000) {
getPathViaRegex(Host, p);
i2++;
}
long end2 = System.currentTimeMillis();
System.out.println("#2 (getPathViaRegex) Took: " + (end2 - start2) + "ms");
long start3 = System.currentTimeMillis();
int i3 = 0;
while (i3 < 1000000) {
getPathViaSplit(Host);
i3++;
}
long end3 = System.currentTimeMillis();
System.out.println("#3 (getPathViaSplit) took: " + (end3 - start3) + "ms");
}
public static String getPathviaURL(String url) {
String path = null;
try {
path = new URL(url).getPath();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return path;
}
public static String getPathViaRegex(String url, Pattern p) {
Matcher m = p.matcher(url);
if (m.find()) {
return m.group(3);
}
return null;
}
public static String getPathViaSplit(String url) {
String[] parts = url.split("/");
parts = Arrays.copyOfRange(parts, 3, parts.length);
String joined = "/" + StringUtils.join(parts, "/");
return joined;
}
URL
クラスのURL.getPath()
メソッドを使用します。
あなたはこれを行うことができます:
URL url = new URL("http://www.costo.com/test1/test2");
System.out.println(url.getPath());
アプリケーションのURLから http:// localhost:8080/test1/test2/main.jsp のようなものから取得したい場合。使用できる
request.getRequestURI() //result will be like test1/test2