我正在尝试确定变量是否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]?)?"))
如果我输入一个字符,我是否遗漏了什么会引发错误?
如果可以避免,请不要使用正则表达式。您实际上可以解析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
您不需要正则表达式。只需解析您的degreeOfDiffString
using Double.parseDouble()
,然后检查是否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
}
如果String中有随机的东西,比如“!” 或一些字母,然后NumberFormatException
应该抛出一个,你可以处理。
该模式不正确。
一个小问题是你使用[1]
and[4]
当你真正的意思是1
和4
分别。
你必须^
在你的模式的开始只放一个;其他插入符号不正确。此外,Javamatches()
方法将整个模式与主题匹配,因此插入符号是多余的。
使用小数点匹配的方式,它将接受第一个数字之后的裸句以及数字后面的句点。这是你想要的吗?
尝试使用与接受的数字匹配的这种模式:
1\\.[2-9]|[23](\\.\\d)?|4(\\.[0-7])?|4\\.8