- switch (firstSixCharacters) {
- case "http:/":
- formattedUrlString = unformattedUrlString;
- break;
- case "https:":
- formattedUrlString = unformattedUrlString;
- break;
- case "ftp://":
- formattedUrlString = unformattedUrlString;
- break;
- default:
- formattedUrlString = "http://" + unformattedUrlString;
- }
+ // Convert unformattedUrlString to a URL, then to a URI, and then back to a string, which sanitizes the input and adds in any missing components.
+ try {
+ unformattedUrl = new URL(unformattedUrlString);
+ } catch (MalformedURLException e) {
+ e.printStackTrace();
+ }
+
+ if (unformattedUrl.getProtocol() != null) {
+ scheme = unformattedUrl.getProtocol();
+ } else {
+ scheme = "http";
+ }
+
+ final String authority = unformattedUrl.getAuthority();
+ final String path = unformattedUrl.getPath();
+ final String query = unformattedUrl.getQuery();
+ final String fragment = unformattedUrl.getRef();
+
+ formattedUri.scheme(scheme).authority(authority).path(path).query(query).fragment(fragment);
+ formattedUrlString = formattedUri.build().toString();