我想使用提供的方法评估电话号码。电话号码的长度应始终为10。但是,以下方法似乎总是返回false。这是为什么?谢谢。
public static boolean valPhoneNumber(String phonenumber){
boolean result= true;
if (phonenumber.length() > 10 || phonenumber.length() < 10){
result= false;
}else
phonenumber.length();
char a=phonenumber.charAt(0);
char b=phonenumber.charAt(1);
char d=phonenumber.charAt(3);
char e=phonenumber.charAt(4);
char f=phonenumber.charAt(5);
if (a<2 || a>9){
result = false;
}else if( b<0 || b>8){
result = false;
}else if (d<2 || d>9){
result = false;
}else if (e==1 && f==1){
result = false;
}
return result;
}
答案 0 :(得分:8)
因此,查看正在比较字符和数字的梯子。在这种情况下,将使用ASCII值进行比较。
您可以将单引号引起来以检查范围:
if (a < '2' || a > '9') {
result = false;
} else if( b < '0' || b > '8') {
result = false;
} else if (d < '2' || d > '9') {
result = false;
} else if (e == '1' && f == '1') {
result = false;
}
一个班轮:
result = !((a < '2' || a > '9') || (b < '0' || b > '8') || (d < '2' || d > '9') || (e == '1' && f == '1'));
答案 1 :(得分:1)
我认为您的代码在解析phonenumber.charAt()时出错。这总是返回char,当您与整数进行比较时,它将转换为该char码(ASCII码)显示的数字。我认为您应该将代码修改为int a=Character.getNumericValue(phonenumber.charAt(0));
,依此类推
答案 2 :(得分:1)
我认为使用正则表达式的方法将是最干净,最简单的解决方案。
public static boolean valPhoneNumber(String phonenumber){
String regex = "[2-9][0-8][0-9][2-9][02-9][0-29][0-9]{4}";
return phonenumber.matches(regex);
}
答案 3 :(得分:0)
您应该将char变量转换为整数。
答案 4 :(得分:0)
您可以尝试以下操作:
int a = Integer.parseInt(phonenumber.substring(0,1));
答案 5 :(得分:0)
我添加了单引号以检查范围。谢谢大家。
public static boolean valPhoneNumber(String phonenumber) {
boolean result= true;
if (phonenumber.length() != 10) {
result = false;
} else {
//phonenumber.length();
char a = phonenumber.charAt(0);
char b = phonenumber.charAt(1);
char d = phonenumber.charAt(3);
char e = phonenumber.charAt(4);
char f = phonenumber.charAt(5);
if (a < '2' || a > '9') {
} else if( b<'0' || b>'8') {
result = false;
} else if (d < '2' || d > '9') {
result = false;
} else if (e == '1' && f == '1') {
result = false;
}
}
return result;
}