如何确保Uri.parse()在java/android中始终返回有效值?

如何确保Uri.parse()在java/android中始终返回有效值?,java,android,http,url,uri,Java,Android,Http,Url,Uri,在java中(在android中很好,但我认为这是一个普遍的问题) 我这样做 Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("www.google.ca")); startActivity(browserIntent); 但后来它崩溃了。然后我试了一下: Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.goog

在java中(在android中很好,但我认为这是一个普遍的问题)

我这样做

Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("www.google.ca"));
startActivity(browserIntent);
但后来它崩溃了。然后我试了一下:

Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.ca"));
startActivity(browserIntent);
这起作用了。添加
http://
似乎可以让它工作

链接是客户端将键入的内容,因此不能保证他们键入的内容是有效的。有没有办法修复该链接以确保它在Uri.parse()上工作,从而适用于所有情况?如果它无效,那么我应该能够检测到它

谢谢

检查字符串中的“http://”或“https://”,如果找到,请将其传递给URI或在开头追加

检查:

str1.toLowerCase().contains(str2.toLowerCase())
追加:

str3 = "htttp://"+str2

是的,你不能确定你得到了什么输入。所以我想你可以用正则表达式模式检查它。 我认为这种模式有效

Pattern pattern=Pattern.compile("^(http|https)://[a-z|A-z]{1,}.[a-z|A-Z]{1,}.[a-z|A-Z]{2,}$");
这将导致一个可以被解析的url。 但对于大多数人来说,他们倾向于输入类似www.xxx.com的内容,因此我建议使用以下模式再次检查之前的模式是否不匹配

Pattern pattern=Pattern.compile("^[a-z|A-z]{1,}.[a-z|A-Z]{1,}.[a-z|A-Z]{2,}$");
并在url的下方添加http://