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 を解析し、が 1.2 から 4.8 (両端を含む)Double.parseDouble()かどうかを確認します。double

例(テストされていない、私が今入力したもの):

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-28T22:24:29.633 に答える
0

受け入れられた番号に一致するこのパターンを試してください:

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

パターンはそのままでは正しくありません。

1 つの問題は、 andを本当に意味するときに[1]andをそれぞれ使用することです。[4]14

^パターンの最初に1 つだけ配置する必要があります。他のキャレットは正しくありません。また、Javamatches()メソッドはサブジェクトに対してパターン全体を照合するため、キャレットは冗長です。

小数点の一致を表現する方法では、最初の数字の後のピリオドだけでなく、数字が続くピリオドの両方を受け入れます。これは、あなたの望むことですか?

于 2013-04-28T22:29:37.993 に答える