如果URL不存在,如何将协议添加到URL?(在Android应用程序中)

如果URL不存在,如何将协议添加到URL?(在Android应用程序中),android,Android,我正在开发一个通过编辑文本小部件从用户那里获取URL链接的应用程序。如何检查给定URL是否有协议?如果没有,我如何为特定的URL添加正确的协议 例如,如果用户输入:google.com 如何使其成为:https://google.com 主要问题是知道给定地址的正确URL协议(是否为http/https/ftp?等等)。只需将您的输出字符串与.contains()属性进行比较即可 String value = editText.getText().toString(); if(!value

我正在开发一个通过编辑文本小部件从用户那里获取URL链接的应用程序。如何检查给定URL是否有协议?如果没有,我如何为特定的URL添加正确的协议

例如,如果用户输入:
google.com
如何使其成为:
https://google.com


主要问题是知道给定地址的正确URL协议(是否为
http/https/ftp
?等等)。

只需将您的输出字符串与
.contains()
属性进行比较即可

 String value = editText.getText().toString();

 if(!value.contains("https://")) {
    // add https:// to ur string 
 }else {
     // No need to add 
 }

您可以使用String.startsWith()检查url字符串是否以http://开头

public String valid_url(final String url)
    {
        if (!url.startsWith("http://") && !url.startsWith("https://"))
            {
               return "http://" + url;
            }
        return url;
    }

如前所述,使用SDK的URL类

这里有一个例子:

var urlWithScheme = new URL("https://www.google.com");
var urlWithoutScheme = new URL("www.google.com");

if (urlWithScheme.getProtocol() != null && urlWithScheme.getProtocol().length() > 0) {
    System.out.println("Given URL includes scheme: " + urlWithScheme.getProtocol());
}

if (urlWithoutScheme.getProtocol() != null && urlWithoutScheme.getProtocol().length() > 0) {
    System.out.println("Given URL includes scheme: " + urlWithoutScheme.getProtocol());
} else {
    System.out.println("Url has no Protocol and you can't guess it by the domain name, because under this name all possible services can exist!");
}
如果给定的URL没有protocoll,您就猜不到了。因为在域名下,Parralel中可以存在任何特定于协议的服务


我会把它缩小到只支持http和https。为此,您可以编写一个测试,比如连接到https url,如果成功,可以使用它,因为首选https。如果获得重定向或未连接,请尝试http;)

首先使用.contains()方法检查url是否有协议 并使用.indexof()和.substring()方法获取协议


这个解决方案对我有效:

if(!url.startsWith("www.")&& !url.startsWith("http://") && !url.startsWith("https://")){
    url = "www."+url;
 }

if(!url.startsWith("http://") && !url.startsWith("https://")){
    url = "http://"+url;
 }

希望这将对您有所帮助。

只需将您的输出字符串与
.contains()
属性进行比较。检查:如果条件错误,则检查
|
中可能存在的重复项。因为当url字符串看起来像
https://stackoverflow.com
然后将其传递给此函数,结果将是:
http://https://stackoverflow.com
。将
|
替换为
&&
将解决此问题。
if(!url.startsWith("www.")&& !url.startsWith("http://") && !url.startsWith("https://")){
    url = "www."+url;
 }

if(!url.startsWith("http://") && !url.startsWith("https://")){
    url = "http://"+url;
 }