我正在尝试确定变量degreeOfDifficulty
是否为“1.2”和“4.8”(含)之间的数值,并且不接受字符值。所以“1.0”,“4.9”,“a”和“!”无效; “1.2”,“4.8”,“4.0”和“4”有效。到目前为止,我有:
degreeOfDiffString.matches("^[1](\\.[2-9]?)?|^[2-3](\\.[0-9]?)?|[4](\\.[0-8]?)?"))
如果我输入一个角色,是否有我遗漏的东西会导致错误抛出?
答案 0 :(得分:3)
如果可以避免使用正则表达式,请不要使用正则表达式。您实际上可以解析degreeOfDiffString
并获取数值(如果它是数字),然后检查上限和下限(1.2到4.8)。更容易编码和理解正在发生的事情。正则表达式使您的代码容易出错,如果您决定稍后更改边界,则必须重新使用正则表达式。
try
{
double d = Double.parseDouble(degreeOfDiffString);
if(d >= 1.2 && d <= 4.8)
{
return true; // valid
}
}
catch(NumberFormatException ex)
{
}
return false; // all other cases -> invalid
答案 1 :(得分:2)
你不需要正则表达式。只需使用Double.parseDouble()
解析degreeOfDiffString
,然后检查double
是否介于1.2和4.8(含)之间。
示例(未经测试,只是我现在输入的内容):
try
{
String degreeOfDiffString = "3.4";
double number = Double.parseDouble(degreeOfDiffString);
if (number < 1.2 || number > 4.8) System.out.println("Invalid difficulty.");
else
{
// Do stuff
}
} catch (Exception e)
{
// Handle exception
}
如果字符串中有随机内容,例如“!”或者某个字母,然后应该抛出NumberFormatException
,你可以处理。
答案 2 :(得分:0)
模式不正确。
一个狡辩是,当你真的分别是[1]
和[4]
时,你会使用1
和4
。
您必须在模式的开头只放置一个^
;其他插入符不正确。此外,Java matches()
方法将整个模式与主题相匹配,因此插入符号是多余的。
你有小数点匹配措辞的方式,它将接受第一个数字之后的一段时间以及一个数字之后的句号。这是你想要的吗?
答案 3 :(得分:0)
尝试使用匹配接受号码的模式:
1\\.[2-9]|[23](\\.\\d)?|4(\\.[0-7])?|4\\.8