我正在使用网络浏览器,其中有一个*
,供用户输入查询。我想区分搜索查询或网址。我当前的代码只是在任何查询的前面添加SearchView
并尝试加载它。
这是我目前的代码。
http://www.
问题是String query = search_q;
if(!query.startsWith("www.")&& !query.startsWith("http://")){
query = "www."+ query ;
}
if(!query.startsWith("http://")){
query = "http://"+query;
}
if( Patterns.WEB_URL.matcher(query).matches()){ //checks if the query looks like an URL
web1.loadUrl(query);
}
else
web1.loadUrl("https://www.google.com//search?q=+"+search_q);
即使传递Patterns.WEB_URL.matcher(query).matches()
也会返回true。
答案 0 :(得分:1)
检查
if( Patterns.WEB_URL.matcher(query).matches() && isUrl(query)){ //checks if the query looks like an URL
web1.loadUrl(query);
}
功能定义 isUrl : -
public Boolean isUrl(String query){
int a=0;
int onlyfind=0;
for (int i = 0 ; i<query.length() ; i++){
if (query.charAt(i) == '.')
a++;
if(a==1){
onlyfind= i;
}
}
if(a==1){
if(query.substring(0,onlyfind+1).equals("http://www"))
return false;
}
return true;
}
答案 1 :(得分:0)
尝试使用此方法验证网址(查询):
//isValidURL(query);
boolean isValidURL(String url) {
try {
new URI(url).parseServerAuthority();
return true;
} catch (URISyntaxException e) {
return false;
}
}
如果它返回false
,则:
web1.loadUrl("https://www.google.com//search?q=+"+search_q);
答案 2 :(得分:0)
我认为验证网址的最佳方法是使用正则表达式。因为如果您正在使用浏览器,则不应限制以www
开头的字符串查询的验证,如果网站为dev.website.com
该怎么办?它是一个有效的网站网址,或者如果地址以https
开头,而不只是http
,该怎么办?所以我认为尝试使用正则表达式来验证查询字符串是否为URL时具有参考模式:
private boolean isURL(CharSequence searchQuery) {
Pattern urlPattern = Pattern.compile("(https?:\\/\\/(?:www\\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\\.[^\\s]{2,}|www\\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\\.[^\\w\\D\\S]{2,}|[^\\s]{2,}[a-zA-Z0-9]\\.[^\\s]{2,})");
Matcher matcher = urlPattern.matcher(searchQuery);
return matcher.matches();
}
然后调用该方法:
String query = search_q;
if(isURL(query)) {
web1.loadUrl(query);
} else {
web1.loadUrl("https://www.google.com//search?q=+"+search_q);
}
希望这有帮助。