Я пытаюсь разрешить два URI, но это не так просто, как хотелось бы.
URI a = new URI("http://www.foo.com");
URI b = new URI("bar.html");
Проблема в том, что a.resolve(b).toString()
теперь "http://www.foo.combar.html"
. Как мне это избежать?
Я пытаюсь разрешить два URI, но это не так просто, как хотелось бы.
URI a = new URI("http://www.foo.com");
URI b = new URI("bar.html");
Проблема в том, что a.resolve(b).toString()
теперь "http://www.foo.combar.html"
. Как мне это избежать?
Похоже, вы, вероятно, захотите использовать URL, а не URI (что более общее и нужно иметь дело с менее строгим синтаксисом.)
URI a = new URI("http://www.foo.com");
URI b = new URI("bar.html");
URI c = a.resolve(b);
c.toString() -> "http://www.foo.combar.html"
c.getAuthority() -> "www.foo.com"
c.getPath() -> "bar.html"
URI toString() не ведет себя так, как вы ожидали, но, учитывая его общий характер, может случиться так, что он должен быть прощен.
Унылый метод URI toURL() не ведет себя так, как я бы надеялся дать вам то, что вы хотите.
URL u = c.toURL();
u.toString() -> "http://www.foo.combar.html"
u.getAuthority() -> "www.foo.combar.html" --- Oh dear :(
Так лучше всего начать прямо с URL-адреса, чтобы получить то, что вы хотите:
URL x = new URL("http://www.foo.com");
URL y = new URL(x, "bar.html");
y.toString() -> "http://www.foo.com/bar.html"
URI должен содержать окончательный разделитель ('/'), чтобы решить, как вы хотите:
URI a = new URI("http://www.foo.com/");
Хорошо, появляется из URL deffinition схема://domain: port/path? query_string # fragment_id
перед трактом должно быть 3 слэша (два по схеме и один непосредственно перед трактом)
2 может произойти:
есть мой код кода:
String url = "http://www.foo.com";
String endSlash="";
int indexOfSlash = 0;
for(int i = 0;i<3;i++){
int nextIndex = url.indexOf('/',indexOfSlash);
if(!(nextIndex>0)){
if(i>1){
endSlash="/";
}else{
throw new MalformedURLException("Bad given url format, mising :// after schema");
}
}else{
indexOfSlash = ++nextIndex;
}
}
URL rightUrl = new URL(url+endSlash);
С помощью URI вы можете использовать
URI a = new URI("http://www.foo.com/");
URI b = new URI("bar.html");
URI c = a.resolve(b);
или
URI a = new URI("http://www.foo.com");
URI b = new URI("/bar.html");
URI c = a.resolve(b);