我有一个问题,我需要确保字符串(称为id)中的最后两位数字介于01和40之间。我以为我已经弄清楚了,但是当使用'00'时,我的测试失败了——这应该失败,但它通过了。
我知道它为什么这样做(由于大于/小于),但我似乎不知道如何克服这个问题。我是否需要将字符10和11连接在一起,然后以这种方式附加进一步的条件格式?
{
if ((id.charAt(10)<='0'&& id.charAt(11)<= '9')
return true;
}
else {
return false;
}
}
您可以使用'JustAnotherDeveloper'在评论中描述的方法(参见下面的方法isBetween2
),但这意味着您依赖于Integer.parseInt(String)
和NumberFormatException
,可能会抛出来定义索引10 &这不是最好的解决方案。
您应该使用正则表达式来确保两个字符是数字(参见下面的方法isBetween
)。
请注意,在下面的示例中,正则表达式模式将接受前10个字符的任何字母数字字符。如果需要,你必须修改图案。
public boolean isBetween(String id) {
Pattern p = Pattern.compile("([[a-zA-Z0-9]]{10})([0-9]{2})");
Matcher n = p.matcher(id);
if (n.find()) {
int i = Integer.parseInt(n.group(2));
return i >= 1 && i <= 40;
} else {
return false;
}
}
public boolean isBetween2(String id) {
String s = id.substring(10, 12);
int i;
try {
i = Integer.parseInt(s);
return i >= 1 && i <= 40;
} catch (NumberFormatException e) {
return false;
}
}