Given a string, how do I determine if it is an absolute URL or a relative URL in Java? I tried the following code:
private boolean isAbsoluteURL(String urlString) {
boolean result = false;
try
{
URL url = new URL(urlString);
String protocol = url.getProtocol();
if (protocol != null && protocol.trim().length() > 0)
result = true;
}
catch (MalformedURLException e)
{
return false;
}
return result;
}
The problem is that all relative URLs (www.google.com
or /questions/ask
). are throwing a MalformedURLException
because there is no protocol defined.
Original Answer. This will recognize an absolute URL, if: URL contains "://" anywhere after the first character, or. URL starts with "//" (protocol relative)
An absolute URL contains more information than a relative URL does. Relative URLs are more convenient because they are shorter and often more portable. However, you can use them only to reference links on the same server as the page that contains them.
How about this:
final URI u = new URI("http://www.anigota.com/start");
// URI u = new URI("/works/with/me/too");
// URI u = new URI("/can/../do/./more/../sophis?ticated=stuff+too");
if (u.isAbsolute())
{
System.out.println("Yes, I am absolute!");
}
else
{
System.out.println("Ohh noes, it's a relative URI!");
}
More info here.
As I said in in my comment, you have to normalize the URL before checking it, and that normalization depends on your application, since www.google.com
is not an absolute URL. Here is an example code, which can be used to check URLs to be absolute:
import java.net.URL;
public class Test {
public static void main(String [] args) throws Exception {
String [] urls = {"www.google.com",
"http://www.google.com",
"/search",
"file:/dir/file",
"file://localhost/dir/file",
"file:///dir/file"};
for (String url : urls) {
System.out.println("`" + url + "' is " +
(isAbsoluteURL(url)?"absolute":"relative"));
}
}
public static boolean isAbsoluteURL(String url)
throws java.net.MalformedURLException {
final URL baseHTTP = new URL("http://example.com");
final URL baseFILE = new URL("file:///");
URL frelative = new URL(baseFILE, url);
URL hrelative = new URL(baseHTTP, url);
System.err.println("DEBUG: file URL: " + frelative.toString());
System.err.println("DEBUG: http URL: " + hrelative.toString());
return frelative.equals(hrelative);
}
}
Output:
~$ java Test 2>/dev/null
`www.google.com' is relative
`http://www.google.com' is absolute
`/search' is relative
`file:/dir/file' is absolute
`file://localhost/dir/file' is absolute
`file:///dir/file' is absolute
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With