我需要验证在 TextEdit 中输入的字符串是否是网址,例如。“www.stackoverflow.com”或 IP 地址,例如。“64.34.119.12”。我试过这两种方法都没有成功。我有名为 ip 的私有类变量。
方法一:
public boolean isAdress(){
boolean isaddr = true;
try
{
ip = new NetTask().execute(""+textEdit1.getText()).get();
}
catch (Exception ex)
{
isaddr = false;
}
return isaddr;
}
方法 2 是我在将字符串发送到 NetTask 之前检查字符串的方法。
public boolean isAdress(){
String adress = textEdit1.getText().toString();
boolean isaddr = true;
if (adress.length() > 0) {
String[] nums = adress.split(".");
if (nums.length == 4) {
for (String str : nums) {
int i = Integer.parseInt(str);
if ((i < 0) || (i > 255)) {
isaddr = false;
}
}
}
}
return isaddr;
}
这第二种方法也不起作用,但即使这样做,它也无法验证网址。
那么有什么方法可以验证这两种情况的字符串吗?
编辑:阅读有关正则表达式后,我也尝试了这种方法:
private String regex = "\\b(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]";
public boolean isAdress(){
String adress = textEdit1.getText().toString();
try {
Pattern patt = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
Matcher matcher = patt.matcher(adress);
return matcher.matches();
} catch (RuntimeException e) {
return false;
}
}
但它似乎一直返回假。