我需要限制一个3位数的字符串,第一个数字只接受0和1,第二个数字接受0到4,第三个数字接受0到3。实际上,经过多次修改和新尝试后,我有了代码:
public boolean isLocalizacaoValida(String localizacao) {
String numero1 = localizacao.substring(0);
int intNumero1 = Integer.parseInt(numero1);
String numero2 = localizacao.substring(1);
int intNumero2 = Integer.parseInt(numero2);
String numero3 = localizacao.substring(2);
int intNumero3 = Integer.parseInt(numero3);
if (localizacao.length() != 3) {
System.out.println("Localização inválida!");
return false;
}
if (localizacao.length() == 3) {
if ((intNumero1 < 0 && intNumero1 > 1) || (intNumero2 < 0 && intNumero2 > 4) || (intNumero3 < 0 && intNumero3 > 3)) {
System.out.println("Localização inválida!");
return false;
} else {
System.out.println("Localização válida!");
return true;
}
}
System.out.println("Localização inválida!");
return false;
}
这样,即使字符串应该返回false,它也会一直返回true。
答案 0 :(得分:2)
你可以使用正则表达式,
String pattern = "^[01][0-4][0-3]$";
return input.matches(pattern);
答案 1 :(得分:0)
采用单个int的substring方法通常会返回从该索引到字符串末尾的所有内容。你应该使用这样的两个参数版本:
String numero1 = localizacao.substring(0, 1); //return only the first character
String numero2 = localizacao.substring(1, 2); //return only the second character
等等。
其次,if语句与AND操作连接的条件。也就是说,您要检查第一个数字是否在某个范围内,第二个数字是否在某个范围内,第三个数字是否在正确的范围内。只要任何一个人在正确的范围内,你就会得到真的。
if ((intNumero1 >= 0 && intNumero1 <= 1) && (intNumero2 >= 0 && intNumero2 <= 4) && (intNumero3 >= 0 && intNumero3 <= 3)) {
System.out.println("Localização válida!");
return true;
} else {
System.out.println("Localização inválida!");
return false;
}
看,你写的条件永远不会成真:
intNumero1 < 0 && intNumero1 > 1
要求值小于0且大于1?这总是错误的。
答案 2 :(得分:0)
Substring返回多个char,试试这个:
public boolean isLocalizacaoValida(String localizacao) {
if (localizacao.length() != 3) {
System.out.println("Localização inválida!");
return false;
}
if (localizacao.length() == 3) {
String numero1 = localizacao.substring(0,1);
int intNumero1 = Integer.parseInt(numero1);
String numero2 = localizacao.substring(1,2);
int intNumero2 = Integer.parseInt(numero2);
String numero3 = localizacao.substring(2);
int intNumero3 = Integer.parseInt(numero3);
if ((intNumero1 < 0 && intNumero1 > 1) || (intNumero2 < 0 && intNumero2 > 4) || (intNumero3 < 0 && intNumero3 > 3)) {
System.out.println("Localização inválida!");
return false;
} else {
System.out.println("Localização válida!");
return true;
}
}
System.out.println("Localização inválida!");
return false;
}
答案 3 :(得分:0)
(intNumero1 < 0 && intNumero1 > 1)
不可能是对的。只有当负数大于1时才会成立。我不知道任何。
您想使用||
。如果intNumero1
小于0,则返回true 如果大于1,则返回。换句话说,如果它是除0或1之外的任何内容。
答案 4 :(得分:-1)
怎么样
int num = Integer.parseInt(localizacao);
return (num/100 <= 1) && (num%100/10 <= 4) && (num%10 <= 3);
如果您想处理异常,可以使用TryParse
代替parseInt
。