0

我正在尝试确定变量是否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]?)?"))

如果我输入一个字符,我是否遗漏了什么会引发错误?

4

4 回答 4

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
于 2013-04-28T22:29:13.497 回答
2

您不需要正则表达式。只需解析您的degreeOfDiffStringusing 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应该抛出一个,你可以处理。

于 2013-04-28T22:24:29.633 回答
0

该模式不正确。

一个小问题是你使用[1]and[4]当你真正的意思是14分别。

你必须^在你的模式的开始只放一个;其他插入符号不正确。此外,Javamatches()方法将整个模式与主题匹配,因此插入符号是多余的。

使用小数点匹配的方式,它将接受第一个数字之后的裸句以及数字后面的句点。这是你想要的吗?

于 2013-04-28T22:29:37.993 回答
0

尝试使用与接受的数字匹配的这种模式:

1\\.[2-9]|[23](\\.\\d)?|4(\\.[0-7])?|4\\.8
于 2013-04-28T22:35:30.420 回答