我正在尝试确定变量是否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]?)?"))如果我输入一个字符,我是否遗漏了一些东西而导致错误抛出?
发布于 2013-04-29 06:29:13
在可以避免的情况下,不要使用正则表达式。实际上,您可以解析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发布于 2013-04-29 06:24:30
为此,您不需要使用正则表达式。只需使用Double.parseDouble()解析您的degreeOfDiffString,然后检查double是否在1.2和4.8之间(包括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,你可以处理它。
发布于 2013-04-29 06:29:38
目前的模式是不正确的。
有一个问题是,当你真正指的是1和4时,你会使用[1]和[4]。
您必须在模式的开头只放置一个^;其他插入符号是不正确的。此外,Java matches()方法将整个模式与主题进行匹配,因此插入符号是多余的。
按照小数点匹配的方式,它既接受第一个数字后面的一个空句点,也接受后面跟着一个数字的句号。这是你想要的吗?
https://stackoverflow.com/questions/16268626
复制相似问题